@@ -10,11 +10,11 @@ include!("../include/include.rs");
1010// 简单实现,无法用于排序对象
1111fn counting_sort_naive ( nums : & mut [ i32 ] ) {
1212 // 1. 统计数组最大元素 m
13- let m = * nums. into_iter ( ) . max ( ) . unwrap ( ) ;
13+ let m = * nums. iter ( ) . max ( ) . unwrap ( ) ;
1414 // 2. 统计各数字的出现次数
1515 // counter[num] 代表 num 的出现次数
1616 let mut counter = vec ! [ 0 ; m as usize + 1 ] ;
17- for & num in & * nums {
17+ for & num in nums. iter ( ) {
1818 counter[ num as usize ] += 1 ;
1919 }
2020 // 3. 遍历 counter ,将各元素填入原数组 nums
@@ -31,16 +31,16 @@ fn counting_sort_naive(nums: &mut [i32]) {
3131// 完整实现,可排序对象,并且是稳定排序
3232fn counting_sort ( nums : & mut [ i32 ] ) {
3333 // 1. 统计数组最大元素 m
34- let m = * nums. into_iter ( ) . max ( ) . unwrap ( ) ;
34+ let m = * nums. iter ( ) . max ( ) . unwrap ( ) as usize ;
3535 // 2. 统计各数字的出现次数
3636 // counter[num] 代表 num 的出现次数
37- let mut counter = vec ! [ 0 ; m as usize + 1 ] ;
38- for & num in & * nums {
37+ let mut counter = vec ! [ 0 ; m + 1 ] ;
38+ for & num in nums. iter ( ) {
3939 counter[ num as usize ] += 1 ;
4040 }
4141 // 3. 求 counter 的前缀和,将“出现次数”转换为“尾索引”
4242 // 即 counter[num]-1 是 num 在 res 中最后一次出现的索引
43- for i in 0 ..m as usize {
43+ for i in 0 ..m {
4444 counter[ i + 1 ] += counter[ i] ;
4545 }
4646 // 4. 倒序遍历 nums ,将各元素填入结果数组 res
@@ -53,9 +53,7 @@ fn counting_sort(nums: &mut [i32]) {
5353 counter[ num as usize ] -= 1 ; // 令前缀和自减 1 ,得到下次放置 num 的索引
5454 }
5555 // 使用结果数组 res 覆盖原数组 nums
56- for i in 0 ..n {
57- nums[ i] = res[ i] ;
58- }
56+ nums. copy_from_slice ( & res)
5957}
6058
6159/* Driver Code */
0 commit comments