Skip to content

Commit

Permalink
fix clippy
Browse files Browse the repository at this point in the history
  • Loading branch information
DaviRain-Su committed Jun 28, 2024
1 parent ce456e4 commit ab34c15
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 21 deletions.
14 changes: 3 additions & 11 deletions rust/src/sort/merge_sort.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,20 +118,12 @@ where

#[test]
fn test_merge_sort() {
impl Infite for i32 {
fn max_value() -> Self {
i32::MAX
}
fn min_value() -> Self {
i32::MIN
}
}
let array = vec![10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];

let merge_sort = MergeSort::from(array);
let mut merge_sort = MergeSort::from(array);
println!("merge_sort: {merge_sort:?}");
// merge_sort.sort();
// assert!(merge_sort.is_sort());
merge_sort.sort();
assert!(merge_sort.is_sort());
println!("merge_sort: {merge_sort:?}");
}

Expand Down
9 changes: 9 additions & 0 deletions rust/src/sort/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,12 @@ pub trait Infite {

fn min_value() -> Self;
}

impl Infite for i32 {
fn max_value() -> Self {
i32::MAX
}
fn min_value() -> Self {
i32::MIN
}
}
20 changes: 10 additions & 10 deletions rust/src/sort/quick_sort.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
/// 这段代码是使用 Rust 编写的快速排序算法的实现。具体来说:
///
/// 1. `quickify` 函数是排序的主函数。如果给定数组(`arr`)的长度小于或等于 1,函数就直接返回,
/// 因为长度小于或等于 1 的数组已经被认为是有序的。然后,它会选择一个 "pivot" (即基准点或枢轴),
/// 然后将数组分为两部分。一部分包含所有小于或等于 pivot 的元素,另一部分包含所有大于 pivot 的元素。然后,
/// 它会递归地调用自己来对这两部分数组进行排序。
/// 因为长度小于或等于 1 的数组已经被认为是有序的。然后,它会选择一个 "pivot" (即基准点或枢轴),
/// 然后将数组分为两部分。一部分包含所有小于或等于 pivot 的元素,另一部分包含所有大于 pivot 的元素。然后,
/// 它会递归地调用自己来对这两部分数组进行排序。
///
/// 2. `partition` 函数是为了划分数组。它的目标是调整数组的元素,使得所有小于或等于 pivot 的元素都在 pivot 的左边,
/// 而所有大于 pivot 的元素都在其右边。这个函数首先将最后一个元素设为 pivot。然后,它会遍历数组的其他元素。
/// 如果当前元素小于或等于 pivot,那么它就会将该元素与数组的第一个未处理的元素交换位置,然后增加这个未处理元素的计数器。
/// 最后,它会将 pivot 与第一个大于 pivot 的元素交换位置,从而确保 pivot 左边的所有元素都小于或等于它,
/// 而它右边的所有元素都大于它。函数最后返回 pivot 的位置。
/// 而所有大于 pivot 的元素都在其右边。这个函数首先将最后一个元素设为 pivot。然后,它会遍历数组的其他元素。
/// 如果当前元素小于或等于 pivot,那么它就会将该元素与数组的第一个未处理的元素交换位置,然后增加这个未处理元素的计数器。
/// 最后,它会将 pivot 与第一个大于 pivot 的元素交换位置,从而确保 pivot 左边的所有元素都小于或等于它,
/// 而它右边的所有元素都大于它。函数最后返回 pivot 的位置。
///
/// 在整个过程中,`quickify`函数通过在每次调用`partition`函数后递归地对 pivot 左边和右边的部分进行排序,
/// 以对整个数组进行排序。快速排序的平均时间复杂度为 O(n log n),其中 n 是数组的大小。
Expand Down Expand Up @@ -46,13 +46,13 @@ pub fn partition<T: Ord + std::fmt::Debug>(arr: &mut [T]) -> usize {
/// 2. 初始化 `i = 0`,这是一个“指针”,它指向我们要交换的下一个元素。
///
/// 3. 我们遍历数组中除 `pivot` 的其他元素。对于每个元素 `j`,如果 `arr[j] <= pivot`,
/// 那么我们就交换 `arr[i]` 和 `arr[j]`,然后 `i` 自增 1。这样做的目的是将所有小于或等于 `pivot` 的元素移动到数组的左侧。
/// 那么我们就交换 `arr[i]` 和 `arr[j]`,然后 `i` 自增 1。这样做的目的是将所有小于或等于 `pivot` 的元素移动到数组的左侧。
///
/// 4. 当我们完成遍历时,`arr` 可能看起来像这样:`[5, 2, 3, 11, 12, 9, 14, 7, 10, 6]`。
/// 现在,`i = 3`,也就是 `arr[i] = 11`。注意到所有小于等于 `pivot`(6)的元素都在左侧,而所有大于 `pivot` 的元素都在右侧。但是,`pivot` 本身还在数组的最右侧。
/// 现在,`i = 3`,也就是 `arr[i] = 11`。注意到所有小于等于 `pivot`(6)的元素都在左侧,而所有大于 `pivot` 的元素都在右侧。但是,`pivot` 本身还在数组的最右侧。
///
/// 5. 我们将 `pivot` 与 `arr[i]` 交换,得到:`[5, 2, 3, 6, 12, 9, 14, 7, 10, 11]`。
/// 这样就确保了 `pivot` 的左侧都是小于或等于它的元素,右侧都是大于它的元素。
/// 这样就确保了 `pivot` 的左侧都是小于或等于它的元素,右侧都是大于它的元素。
///
/// 6. 最后,`partition` 函数返回 `pivot` 的位置,也就是 `i` 的值,它是 3。
///
Expand Down

0 comments on commit ab34c15

Please sign in to comment.