From 34a1bca62707807bb8693e2378a69bddb436aaf8 Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Sun, 26 Mar 2023 22:02:37 +0800 Subject: [PATCH] Add the section of radix sort. (#441) --- codes/c/chapter_sorting/radix_sort.c | 36 ++--- codes/cpp/chapter_sorting/radix_sort.cpp | 66 +++++++++ codes/dart/chapter_sorting/radix_sort.dart | 42 +++--- codes/go/chapter_sorting/radix_sort.go | 27 ++-- codes/go/chapter_sorting/radix_sort_test.go | 3 +- codes/java/chapter_sorting/radix_sort.java | 42 +++--- codes/python/chapter_sorting/radix_sort.py | 56 +++++++ codes/swift/chapter_sorting/radix_sort.swift | 44 +++--- codes/zig/chapter_sorting/radix_sort.zig | 41 +++--- docs/chapter_sorting/bucket_sort.md | 8 +- docs/chapter_sorting/counting_sort.md | 12 +- docs/chapter_sorting/insertion_sort.md | 6 +- docs/chapter_sorting/quick_sort.md | 20 +-- .../radix_sort.assets/radix_sort_overview.png | Bin 0 -> 133308 bytes docs/chapter_sorting/radix_sort.md | 137 ++++++++++++++++++ mkdocs.yml | 7 +- 16 files changed, 405 insertions(+), 142 deletions(-) create mode 100644 codes/cpp/chapter_sorting/radix_sort.cpp create mode 100644 codes/python/chapter_sorting/radix_sort.py create mode 100644 docs/chapter_sorting/radix_sort.assets/radix_sort_overview.png create mode 100644 docs/chapter_sorting/radix_sort.md diff --git a/codes/c/chapter_sorting/radix_sort.c b/codes/c/chapter_sorting/radix_sort.c index dbc74754..4c5ed006 100644 --- a/codes/c/chapter_sorting/radix_sort.c +++ b/codes/c/chapter_sorting/radix_sort.c @@ -13,31 +13,31 @@ int digit(int num, int exp) { } /* 计数排序(根据 nums 第 k 位排序) */ -void countingSort(int nums[], int size, int exp) { - // 十进制的各位数字范围为 0~9 ,因此需要长度为 10 的桶 - int *bucket = (int *) malloc((sizeof(int) * 10)); - // 借助桶来统计 0~9 各数字的出现次数 +void countingSortDigit(int nums[], int size, int exp) { + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + int *counter = (int *) malloc((sizeof(int) * 10)); + // 统计 0~9 各数字的出现次数 for (int i = 0; i < size; i++) { // 获取 nums[i] 第 k 位,记为 d int d = digit(nums[i], exp); // 统计数字 d 的出现次数 - bucket[d]++; + counter[d]++; } // 求前缀和,将“出现个数”转换为“数组索引” for (int i = 1; i < 10; i++) { - bucket[i] += bucket[i - 1]; + counter[i] += counter[i - 1]; } - // 倒序遍历,根据桶内统计结果,将各元素填入暂存数组 tmp - int *tmp = (int *) malloc(sizeof(int) * size); + // 倒序遍历,根据桶内统计结果,将各元素填入 res + int *res = (int *) malloc(sizeof(int) * size); for (int i = size - 1; i >= 0; i--) { int d = digit(nums[i], exp); - int j = bucket[d] - 1; // 获取 d 在数组中的索引 j - tmp[j] = nums[i]; // 将当前元素填入索引 j - bucket[d]--; // 将 d 的数量减 1 + int j = counter[d] - 1; // 获取 d 在数组中的索引 j + res[j] = nums[i]; // 将当前元素填入索引 j + counter[d]--; // 将 d 的数量减 1 } - // 将 tmp 复制到 nums + // 使用结果覆盖原数组 nums for (int i = 0; i < size; i++) { - nums[i] = tmp[i]; + nums[i] = res[i]; } } @@ -52,17 +52,17 @@ void radixSort(int nums[], int size) { } // 按照从低位到高位的顺序遍历 for (int exp = 1; max >= exp; exp *= 10) - // 对数组元素的第 k 位执行「计数排序」 + // 对数组元素的第 k 位执行计数排序 // k = 1 -> exp = 1 // k = 2 -> exp = 10 - // k = 3 -> exp = 100 // 即 exp = 10^(k-1) - countingSort(nums, size, exp); + countingSortDigit(nums, size, exp); } int main() { - /* 基数排序 */ - int nums[] = {23, 12, 3, 4, 788, 192}; + // 基数排序 + int nums[] = {10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996}; int size = sizeof(nums) / sizeof(int); radixSort(nums, size); printf("基数排序完成后 nums = "); diff --git a/codes/cpp/chapter_sorting/radix_sort.cpp b/codes/cpp/chapter_sorting/radix_sort.cpp new file mode 100644 index 00000000..feaf5297 --- /dev/null +++ b/codes/cpp/chapter_sorting/radix_sort.cpp @@ -0,0 +1,66 @@ + +/** + * File: radix_sort.cpp + * Created Time: 2023-03-26 + * Author: Krahets (krahets@163.com) + */ + +#include "../include/include.hpp" + +/* 获取元素 num 的第 k 位,其中 exp = 10^(k-1) */ +int digit(int num, int exp) { + // 传入 exp 而非 k 可以避免在此重复执行昂贵的次方计算 + return (num / exp) % 10; +} + +/* 计数排序(根据 nums 第 k 位排序) */ +void countingSortDigit(vector& nums, int exp) { + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + vector counter(10, 0); + int n = nums.size(); + // 统计 0~9 各数字的出现次数 + for (int i = 0; i < n; i++) { + int d = digit(nums[i], exp); // 获取 nums[i] 第 k 位,记为 d + counter[d]++; // 统计数字 d 的出现次数 + } + // 求前缀和,将“出现个数”转换为“数组索引” + for (int i = 1; i < 10; i++) { + counter[i] += counter[i - 1]; + } + // 倒序遍历,根据桶内统计结果,将各元素填入 res + vector res(n, 0); + for (int i = n - 1; i >= 0; i--) { + int d = digit(nums[i], exp); + int j = counter[d] - 1; // 获取 d 在数组中的索引 j + res[j] = nums[i]; // 将当前元素填入索引 j + counter[d]--; // 将 d 的数量减 1 + } + // 使用结果覆盖原数组 nums + for (int i = 0; i < n; i++) + nums[i] = res[i]; +} + +/* 基数排序 */ +void radixSort(vector& nums) { + // 获取数组的最大元素,用于判断最大位数 + int m = *max_element(nums.begin(), nums.end()); + // 按照从低位到高位的顺序遍历 + for (int exp = 1; exp <= m; exp *= 10) + // 对数组元素的第 k 位执行计数排序 + // k = 1 -> exp = 1 + // k = 2 -> exp = 10 + // 即 exp = 10^(k-1) + countingSortDigit(nums, exp); +} + +/* Driver Code */ +int main() { + // 基数排序 + vector nums = { 10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996 }; + radixSort(nums); + cout << "基数排序完成后 nums = "; + PrintUtil::printVector(nums); + + return 0; +} diff --git a/codes/dart/chapter_sorting/radix_sort.dart b/codes/dart/chapter_sorting/radix_sort.dart index 5ef2fc47..c5894c27 100644 --- a/codes/dart/chapter_sorting/radix_sort.dart +++ b/codes/dart/chapter_sorting/radix_sort.dart @@ -11,51 +11,51 @@ int digit(int num, int exp) { } /* 计数排序(根据 nums 第 k 位排序) */ -void countingSort(List nums, int exp) { - // 十进制的各位数字范围为 0~9 ,因此需要长度为 10 的桶 - List bucket = List.filled(10, 0); +void countingSortDigit(List nums, int exp) { + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + List counter = List.filled(10, 0); int n = nums.length; - // 借助桶来统计 0~9 各数字的出现次数 + // 统计 0~9 各数字的出现次数 for (int i = 0; i < n; i++) { int d = digit(nums[i], exp); // 获取 nums[i] 第 k 位,记为 d - bucket[d]++; // 统计数字 d 的出现次数 + counter[d]++; // 统计数字 d 的出现次数 } // 求前缀和,将“出现个数”转换为“数组索引” for (int i = 1; i < 10; i++) { - bucket[i] += bucket[i - 1]; + counter[i] += counter[i - 1]; } - // 倒序遍历,根据桶内统计结果,将各元素填入暂存数组 tmp - List tmp = List.filled(n, 0); + // 倒序遍历,根据桶内统计结果,将各元素填入 res + List res = List.filled(n, 0); for (int i = n - 1; i >= 0; i--) { int d = digit(nums[i], exp); - int j = bucket[d] - 1; // 获取 d 在数组中的索引 j - tmp[j] = nums[i]; // 将当前元素填入索引 j - bucket[d]--; // 将 d 的数量减 1 + int j = counter[d] - 1; // 获取 d 在数组中的索引 j + res[j] = nums[i]; // 将当前元素填入索引 j + counter[d]--; // 将 d 的数量减 1 } - // 将 tmp 复制到 nums - for (int i = 0; i < n; i++) nums[i] = tmp[i]; + // 使用结果覆盖原数组 nums + for (int i = 0; i < n; i++) nums[i] = res[i]; } /* 基数排序 */ void radixSort(List nums) { // 获取数组的最大元素,用于判断最大位数 // dart 中 int 的长度是 64 位的 - int ma = -1 << 63; - for (int num in nums) if (num > ma) ma = num; + int m = -1 << 63; + for (int num in nums) if (num > m) m = num; // 按照从低位到高位的顺序遍历 - for (int exp = 1; ma >= exp; exp *= 10) - // 对数组元素的第 k 位执行「计数排序」 + for (int exp = 1; exp <= m; exp *= 10) + // 对数组元素的第 k 位执行计数排序 // k = 1 -> exp = 1 // k = 2 -> exp = 10 - // k = 3 -> exp = 100 // 即 exp = 10^(k-1) - countingSort(nums, exp); + countingSortDigit(nums, exp); } /* Driver Code */ void main() { - /* 基数排序 */ - List nums = [23, 12, 3, 4, 788, 192]; + // 基数排序 + List nums = [10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996]; radixSort(nums); print("基数排序完成后 nums = $nums"); } diff --git a/codes/go/chapter_sorting/radix_sort.go b/codes/go/chapter_sorting/radix_sort.go index 3e4191ae..d58a7c95 100644 --- a/codes/go/chapter_sorting/radix_sort.go +++ b/codes/go/chapter_sorting/radix_sort.go @@ -14,29 +14,29 @@ func digit(num, exp int) int { /* 计数排序(根据 nums 第 k 位排序) */ func countingSortDigit(nums []int, exp int) { - // 十进制的各位数字范围为 0~9 ,因此需要长度为 10 的桶 - bucket := make([]int, 10) + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + counter := make([]int, 10) n := len(nums) - // 借助桶来统计 0~9 各数字的出现次数 + // 统计 0~9 各数字的出现次数 for i := 0; i < n; i++ { d := digit(nums[i], exp) // 获取 nums[i] 第 k 位,记为 d - bucket[d]++ // 统计数字 d 的出现次数 + counter[d]++ // 统计数字 d 的出现次数 } // 求前缀和,将“出现个数”转换为“数组索引” for i := 1; i < 10; i++ { - bucket[i] += bucket[i-1] + counter[i] += counter[i-1] } - // 倒序遍历,根据桶内统计结果,将各元素填入暂存数组 tmp - tmp := make([]int, n) + // 倒序遍历,根据桶内统计结果,将各元素填入 res + res := make([]int, n) for i := n - 1; i >= 0; i-- { d := digit(nums[i], exp) - j := bucket[d] - 1 // 获取 d 在数组中的索引 j - tmp[j] = nums[i] // 将当前元素填入索引 j - bucket[d]-- // 将 d 的数量减 1 + j := counter[d] - 1 // 获取 d 在数组中的索引 j + res[j] = nums[i] // 将当前元素填入索引 j + counter[d]-- // 将 d 的数量减 1 } - // 将 tmp 复制到 nums + // 使用结果覆盖原数组 nums for i := 0; i < n; i++ { - nums[i] = tmp[i] + nums[i] = res[i] } } @@ -51,10 +51,9 @@ func radixSort(nums []int) { } // 按照从低位到高位的顺序遍历 for exp := 1; max >= exp; exp *= 10 { - // 对数组元素的第 k 位执行「计数排序」 + // 对数组元素的第 k 位执行计数排序 // k = 1 -> exp = 1 // k = 2 -> exp = 10 - // k = 3 -> exp = 100 // 即 exp = 10^(k-1) countingSortDigit(nums, exp) } diff --git a/codes/go/chapter_sorting/radix_sort_test.go b/codes/go/chapter_sorting/radix_sort_test.go index f9a01167..1fb5b12a 100644 --- a/codes/go/chapter_sorting/radix_sort_test.go +++ b/codes/go/chapter_sorting/radix_sort_test.go @@ -11,7 +11,8 @@ import ( func TestRadixSort(t *testing.T) { /* 基数排序 */ - nums := []int{23, 12, 3, 4, 788, 192} + nums := []int{10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996} radixSort(nums) fmt.Println("基数排序完成后 nums = ", nums) } diff --git a/codes/java/chapter_sorting/radix_sort.java b/codes/java/chapter_sorting/radix_sort.java index 90f5b619..2690b127 100644 --- a/codes/java/chapter_sorting/radix_sort.java +++ b/codes/java/chapter_sorting/radix_sort.java @@ -16,51 +16,51 @@ public class radix_sort { } /* 计数排序(根据 nums 第 k 位排序) */ - static void countingSort(int[] nums, int exp) { - // 十进制的各位数字范围为 0~9 ,因此需要长度为 10 的桶 - int[] bucket = new int[10]; + static void countingSortDigit(int[] nums, int exp) { + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + int[] counter = new int[10]; int n = nums.length; - // 借助桶来统计 0~9 各数字的出现次数 + // 统计 0~9 各数字的出现次数 for (int i = 0; i < n; i++) { int d = digit(nums[i], exp); // 获取 nums[i] 第 k 位,记为 d - bucket[d]++; // 统计数字 d 的出现次数 + counter[d]++; // 统计数字 d 的出现次数 } // 求前缀和,将“出现个数”转换为“数组索引” for (int i = 1; i < 10; i++) { - bucket[i] += bucket[i - 1]; + counter[i] += counter[i - 1]; } - // 倒序遍历,根据桶内统计结果,将各元素填入暂存数组 tmp - int[] tmp = new int[n]; + // 倒序遍历,根据桶内统计结果,将各元素填入 res + int[] res = new int[n]; for (int i = n - 1; i >= 0; i--) { int d = digit(nums[i], exp); - int j = bucket[d] - 1; // 获取 d 在数组中的索引 j - tmp[j] = nums[i]; // 将当前元素填入索引 j - bucket[d]--; // 将 d 的数量减 1 + int j = counter[d] - 1; // 获取 d 在数组中的索引 j + res[j] = nums[i]; // 将当前元素填入索引 j + counter[d]--; // 将 d 的数量减 1 } - // 将 tmp 复制到 nums + // 使用结果覆盖原数组 nums for (int i = 0; i < n; i++) - nums[i] = tmp[i]; + nums[i] = res[i]; } /* 基数排序 */ static void radixSort(int[] nums) { // 获取数组的最大元素,用于判断最大位数 - int ma = Integer.MIN_VALUE; + int m = Integer.MIN_VALUE; for (int num : nums) - if (num > ma) ma = num; + if (num > m) m = num; // 按照从低位到高位的顺序遍历 - for (int exp = 1; ma >= exp; exp *= 10) - // 对数组元素的第 k 位执行「计数排序」 + for (int exp = 1; exp <= m; exp *= 10) + // 对数组元素的第 k 位执行计数排序 // k = 1 -> exp = 1 // k = 2 -> exp = 10 - // k = 3 -> exp = 100 // 即 exp = 10^(k-1) - countingSort(nums, exp); + countingSortDigit(nums, exp); } public static void main(String[] args) { - /* 基数排序 */ - int[] nums = { 23, 12, 3, 4, 788, 192 }; + // 基数排序 + int[] nums = { 10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996 }; radixSort(nums); System.out.println("基数排序完成后 nums = " + Arrays.toString(nums)); } diff --git a/codes/python/chapter_sorting/radix_sort.py b/codes/python/chapter_sorting/radix_sort.py new file mode 100644 index 00000000..160cbadf --- /dev/null +++ b/codes/python/chapter_sorting/radix_sort.py @@ -0,0 +1,56 @@ +""" +File: radix_sort.py +Created Time: 2023-03-26 +Author: Krahets (krahets@163.com) +""" + + +def digit(num: int, exp: int) -> int: + """ 获取元素 num 的第 k 位,其中 exp = 10^(k-1) """ + # 传入 exp 而非 k 可以避免在此重复执行昂贵的次方计算 + return (num // exp) % 10 + +def counting_sort_digit(nums: list[int], exp: int) -> None: + """ 计数排序(根据 nums 第 k 位排序) """ + # 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + counter = [0] * 10 + n = len(nums) + # 统计 0~9 各数字的出现次数 + for i in range(n): + d = digit(nums[i], exp) # 获取 nums[i] 第 k 位,记为 d + counter[d] += 1 # 统计数字 d 的出现次数 + # 求前缀和,将“出现个数”转换为“数组索引” + for i in range(1, 10): + counter[i] += counter[i - 1] + # 倒序遍历,根据桶内统计结果,将各元素填入 res + res = [0] * n + for i in range(n - 1, -1, -1): + d = digit(nums[i], exp) + j = counter[d] - 1 # 获取 d 在数组中的索引 j + res[j] = nums[i] # 将当前元素填入索引 j + counter[d] -= 1 # 将 d 的数量减 1 + # 使用结果覆盖原数组 nums + for i in range(n): + nums[i] = res[i] + +def radix_sort(nums: list[int]) -> None: + """ 基数排序 """ + # 获取数组的最大元素,用于判断最大位数 + m = max(nums) + # 按照从低位到高位的顺序遍历 + exp = 1 + while exp <= m: + # 对数组元素的第 k 位执行计数排序 + # k = 1 -> exp = 1 + # k = 2 -> exp = 10 + # 即 exp = 10^(k-1) + counting_sort_digit(nums, exp) + exp *= 10 + +""" Driver Code """ +if __name__ == '__main__': + # 基数排序 + nums = [10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996] + radix_sort(nums) + print("基数排序完成后 nums =", nums) diff --git a/codes/swift/chapter_sorting/radix_sort.swift b/codes/swift/chapter_sorting/radix_sort.swift index e1281c46..1bbb85ce 100644 --- a/codes/swift/chapter_sorting/radix_sort.swift +++ b/codes/swift/chapter_sorting/radix_sort.swift @@ -11,50 +11,49 @@ func digit(num: Int, exp: Int) -> Int { } /* 计数排序(根据 nums 第 k 位排序) */ -func countingSort(nums: inout [Int], exp: Int) { - // 十进制的各位数字范围为 0~9 ,因此需要长度为 10 的桶 - var bucket = Array(repeating: 0, count: 10) +func countingSortDigit(nums: inout [Int], exp: Int) { + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 + var counter = Array(repeating: 0, count: 10) let n = nums.count - // 借助桶来统计 0~9 各数字的出现次数 + // 统计 0~9 各数字的出现次数 for i in nums.indices { let d = digit(num: nums[i], exp: exp) // 获取 nums[i] 第 k 位,记为 d - bucket[d] += 1 // 统计数字 d 的出现次数 + counter[d] += 1 // 统计数字 d 的出现次数 } // 求前缀和,将“出现个数”转换为“数组索引” for i in 1 ..< 10 { - bucket[i] += bucket[i - 1] + counter[i] += counter[i - 1] } - // 倒序遍历,根据桶内统计结果,将各元素填入暂存数组 tmp - var tmp = Array(repeating: 0, count: n) + // 倒序遍历,根据桶内统计结果,将各元素填入 res + var res = Array(repeating: 0, count: n) for i in stride(from: n - 1, through: 0, by: -1) { let d = digit(num: nums[i], exp: exp) - let j = bucket[d] - 1 // 获取 d 在数组中的索引 j - tmp[j] = nums[i] // 将当前元素填入索引 j - bucket[d] -= 1 // 将 d 的数量减 1 + let j = counter[d] - 1 // 获取 d 在数组中的索引 j + res[j] = nums[i] // 将当前元素填入索引 j + counter[d] -= 1 // 将 d 的数量减 1 } - // 将 tmp 复制到 nums + // 使用结果覆盖原数组 nums for i in nums.indices { - nums[i] = tmp[i] + nums[i] = res[i] } } /* 基数排序 */ func radixSort(nums: inout [Int]) { // 获取数组的最大元素,用于判断最大位数 - var ma = Int.min + var m = Int.min for num in nums { - if num > ma { - ma = num + if num > m { + m = num } } // 按照从低位到高位的顺序遍历 - for exp in sequence(first: 1, next: { ma >= ($0 * 10) ? $0 * 10 : nil }) { - // 对数组元素的第 k 位执行「计数排序」 + for exp in sequence(first: 1, next: { m >= ($0 * 10) ? $0 * 10 : nil }) { + // 对数组元素的第 k 位执行计数排序 // k = 1 -> exp = 1 // k = 2 -> exp = 10 - // k = 3 -> exp = 100 // 即 exp = 10^(k-1) - countingSort(nums: &nums, exp: exp) + countingSortDigit(nums: &nums, exp: exp) } } @@ -62,8 +61,9 @@ func radixSort(nums: inout [Int]) { enum RadixSort { /* Driver Code */ static func main() { - /* 基数排序 */ - var nums = [23, 12, 3, 4, 788, 192] + // 基数排序 + var nums = [10546151, 35663510, 42865989, 34862445, 81883077, + 88906420, 72429244, 30524779, 82060337, 63832996] radixSort(nums: &nums) print("基数排序完成后 nums = \(nums)") } diff --git a/codes/zig/chapter_sorting/radix_sort.zig b/codes/zig/chapter_sorting/radix_sort.zig index 9f266d1f..cf18aa3a 100644 --- a/codes/zig/chapter_sorting/radix_sort.zig +++ b/codes/zig/chapter_sorting/radix_sort.zig @@ -12,57 +12,56 @@ fn digit(num: i32, exp: i32) i32 { } // 计数排序(根据 nums 第 k 位排序) -fn countingSort(nums: []i32, exp: i32) !void { - // 十进制的各位数字范围为 0~9 ,因此需要长度为 10 的桶 +fn countingSortDigit(nums: []i32, exp: i32) !void { + // 十进制的位范围为 0~9 ,因此需要长度为 10 的桶 var mem_arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); // defer mem_arena.deinit(); const mem_allocator = mem_arena.allocator(); - var bucket = try mem_allocator.alloc(usize, 10); - std.mem.set(usize, bucket, 0); + var counter = try mem_allocator.alloc(usize, 10); + std.mem.set(usize, counter, 0); var n = nums.len; - // 借助桶来统计 0~9 各数字的出现次数 + // 统计 0~9 各数字的出现次数 for (nums) |num| { - var d = @bitCast(u32, digit(num, exp)); // 获取 nums[i] 第 k 位,记为 d - bucket[d] += 1; // 统计数字 d 的出现次数 + var d = @bitCast(u32, digit(num, exp)); // 获取 nums[i] 第 k 位,记为 d + counter[d] += 1; // 统计数字 d 的出现次数 } // 求前缀和,将“出现个数”转换为“数组索引” var i: usize = 1; while (i < 10) : (i += 1) { - bucket[i] += bucket[i - 1]; + counter[i] += counter[i - 1]; } - // 倒序遍历,根据桶内统计结果,将各元素填入暂存数组 tmp - var tmp = try mem_allocator.alloc(i32, n); + // 倒序遍历,根据桶内统计结果,将各元素填入 res + var res = try mem_allocator.alloc(i32, n); i = n - 1; while (i >= 0) : (i -= 1) { var d = @bitCast(u32, digit(nums[i], exp)); - var j = bucket[d] - 1; // 获取 d 在数组中的索引 j - tmp[j] = nums[i]; // 将当前元素填入索引 j - bucket[d] -= 1; // 将 d 的数量减 1 + var j = counter[d] - 1; // 获取 d 在数组中的索引 j + res[j] = nums[i]; // 将当前元素填入索引 j + counter[d] -= 1; // 将 d 的数量减 1 if (i == 0) break; } - // 将 tmp 复制到 nums + // 使用结果覆盖原数组 nums i = 0; while (i < n) : (i += 1) { - nums[i] = tmp[i]; + nums[i] = res[i]; } } // 基数排序 fn radixSort(nums: []i32) !void { // 获取数组的最大元素,用于判断最大位数 - var ma: i32 = std.math.minInt(i32); + var m: i32 = std.math.minInt(i32); for (nums) |num| { - if (num > ma) ma = num; + if (num > m) m = num; } // 按照从低位到高位的顺序遍历 var exp: i32 = 1; - while (ma >= exp) : (exp *= 10) { - // 对数组元素的第 k 位执行「计数排序」 + while (exp <= m) : (exp *= 10) { + // 对数组元素的第 k 位执行计数排序 // k = 1 -> exp = 1 // k = 2 -> exp = 10 - // k = 3 -> exp = 100 // 即 exp = 10^(k-1) - try countingSort(nums, exp); + try countingSortDigit(nums, exp); } } diff --git a/docs/chapter_sorting/bucket_sort.md b/docs/chapter_sorting/bucket_sort.md index b87c065a..88e1f386 100644 --- a/docs/chapter_sorting/bucket_sort.md +++ b/docs/chapter_sorting/bucket_sort.md @@ -1,6 +1,8 @@ # 桶排序 -「桶排序 Bucket Sort」是分治思想的典型体现,其通过设置一些桶,将数据平均分配到各个桶中,并在每个桶内部分别执行排序,最终根据桶之间天然的大小顺序将各个桶内元素合并,从而得到排序结果。 +前面介绍的几种排序算法都属于 **基于比较的排序算法**,即通过比较元素之间的大小来实现排序,此类排序算法的时间复杂度无法超越 $O(n \log n)$ 。接下来,我们将学习几种 **非比较排序算法** ,其时间复杂度可以达到线性级别。 + +「桶排序 Bucket Sort」是分治思想的典型体现,其通过设置一些具有大小顺序的桶,每个桶对应一个数据范围,将数据平均分配到各个桶中,并在每个桶内部分别执行排序,最终按照桶的顺序将所有数据合并即可。 ## 算法流程 @@ -72,9 +74,9 @@ [class]{}-[func]{bucketSort} ``` -!!! note "桶排序是计数排序的一种推广" +!!! question "桶排序的应用场景是什么?" - 从桶排序的角度,我们可以把计数排序中计数数组 `counter` 的每个索引想象成一个桶,将统计数量的过程想象成把各个元素分配到对应的桶中,再根据桶之间的有序性输出结果,从而实现排序。 + 桶排序一般用于排序超大体量的数据。例如输入数据包含 100 万个元素,由于空间有限,系统无法一次性将所有数据加载进内存,那么可以先将数据划分到 1000 个桶里,再依次排序每个桶,最终合并结果即可。 ## 算法特性 diff --git a/docs/chapter_sorting/counting_sort.md b/docs/chapter_sorting/counting_sort.md index da2d98b6..f68ae8cb 100644 --- a/docs/chapter_sorting/counting_sort.md +++ b/docs/chapter_sorting/counting_sort.md @@ -1,6 +1,6 @@ # 计数排序 -前面介绍的几种排序算法都属于 **基于比较的排序算法**,即通过比较元素之间的大小来实现排序,此类排序算法的时间复杂度无法超越 $O(n \log n)$ 。接下来,我们将学习一种 **非比较排序算法** ,名为「计数排序 Counting Sort」,其时间复杂度可以达到 $O(n)$ 。 +顾名思义,「计数排序 Counting Sort」通过统计元素数量来实现排序,一般应用于整数数组。 ## 简单实现 @@ -10,8 +10,6 @@ 2. **借助 `counter` 统计 `nums` 中各数字的出现次数**,其中 `counter[num]` 对应数字 `num` 的出现次数。统计方法很简单,只需遍历 `nums` (设当前数字为 `num`),每轮将 `counter[num]` 自增 $1$ 即可。 3. **由于 `counter` 的各个索引是天然有序的,因此相当于所有数字已经被排序好了**。接下来,我们遍历 `counter` ,根据各数字的出现次数,将各数字按从小到大的顺序填入 `nums` 即可。 -观察发现,计数排序名副其实,是通过“统计元素数量”来实现排序的。 - ![计数排序流程](counting_sort.assets/counting_sort_overview.png) === "Java" @@ -74,6 +72,10 @@ [class]{}-[func]{countingSortNaive} ``` +!!! note "计数排序与桶排序的联系" + + 从桶排序的角度看,我们可以把计数排序中计数数组 `counter` 的每个索引想象成一个桶,将统计数量的过程想象成把各个元素分配到对应的桶中。本质上,计数排序是桶排序在整型数据下的一个特例。 + ## 完整实现 细心的同学可能发现,**如果输入数据是对象,上述步骤 `3.` 就失效了**。例如输入数据是商品对象,我们想要按照商品价格(类的成员变量)对商品进行排序,而上述算法只能给出价格的排序结果。 @@ -181,7 +183,7 @@ $$ **时间复杂度 $O(n + m)$** :涉及遍历 `nums` 和遍历 `counter` ,都使用线性时间。一般情况下 $n \gg m$ ,此时使用线性 $O(n)$ 时间。 -**空间复杂度 $O(n + m)$** :借助了长度分别为 $n$ , $m$ 的数组 `res` 和 `counter` ,是“非原地排序”; +**空间复杂度 $O(n + m)$** :借助了长度分别为 $n$ , $m$ 的数组 `res` 和 `counter` ,是“非原地排序”。 **稳定排序**:由于向 `res` 中填充元素的顺序是“从右向左”的,因此倒序遍历 `nums` 可以避免改变相等元素之间的相对位置,从而实现“稳定排序”;其实正序遍历 `nums` 也可以得到正确的排序结果,但结果“非稳定”。 @@ -191,4 +193,4 @@ $$ **计数排序只适用于非负整数**。若想要用在其他类型数据上,则要求该数据必须可以被转化为非负整数,并且不能改变各个元素之间的相对大小关系。例如,对于包含负数的整数数组,可以先给所有数字加上一个常数,将全部数字转化为正数,排序完成后再转换回去即可。 -**计数排序只适用于数据范围不大的情况**。比如,上述示例中 $m$ 不能太大,否则占用空间太多;而当 $n \ll m$ 时,计数排序使用 $O(m)$ 时间,有可能比 $O(n \log n)$ 的排序算法还要慢。 +**计数排序适用于数据量大但数据范围不大的情况**。比如,上述示例中 $m$ 不能太大,否则占用空间太多;而当 $n \ll m$ 时,计数排序使用 $O(m)$ 时间,有可能比 $O(n \log n)$ 的排序算法还要慢。 diff --git a/docs/chapter_sorting/insertion_sort.md b/docs/chapter_sorting/insertion_sort.md index 02c4eaef..c7556264 100755 --- a/docs/chapter_sorting/insertion_sort.md +++ b/docs/chapter_sorting/insertion_sort.md @@ -86,16 +86,16 @@ 在插入操作中,我们会将元素插入到相等元素的右边,不会改变它们的次序,因此是“稳定排序”。 -## 插入排序 vs 冒泡排序 +## 插入排序优势 回顾「冒泡排序」和「插入排序」的复杂度分析,两者的循环轮数都是 $\frac{(n - 1) n}{2}$ 。但不同的是: - 冒泡操作基于 **元素交换** 实现,需要借助一个临时变量实现,共 3 个单元操作; - 插入操作基于 **元素赋值** 实现,只需 1 个单元操作; -因此,可以粗略估计出冒泡排序的计算开销约为插入排序的 3 倍,因此更受欢迎。实际上,许多编程语言(例如 Java)的内置排序函数都使用到了插入排序,大致思路为: +粗略估计,冒泡排序的计算开销约为插入排序的 3 倍,因此插入排序更受欢迎,许多编程语言(例如 Java)的内置排序函数都使用到了插入排序,大致思路为: - 对于 **长数组**,采用基于分治的排序算法,例如「快速排序」,时间复杂度为 $O(n \log n)$ ; - 对于 **短数组**,直接使用「插入排序」,时间复杂度为 $O(n^2)$ ; -**在数据量较小时插入排序更快**,这是因为复杂度中的常数项(即每轮中的单元操作数量)占主导作用。这个现象与「线性查找」和「二分查找」的情况类似。 +虽然插入排序比快速排序的时间复杂度更高,**但实际上在数据量较小时插入排序更快**,这是因为复杂度中的常数项(即每轮中的单元操作数量)占主导作用。这个现象与「线性查找」和「二分查找」的情况类似。 diff --git a/docs/chapter_sorting/quick_sort.md b/docs/chapter_sorting/quick_sort.md index 72713745..5e118ed4 100755 --- a/docs/chapter_sorting/quick_sort.md +++ b/docs/chapter_sorting/quick_sort.md @@ -115,16 +115,6 @@ [class]{QuickSort}-[func]{partition} ``` -!!! question "“从右往左查找”与“从左往右查找”顺序可以交换吗?" - - 不行,当我们以最左端元素为基准数时,必须先“从右往左查找”再“从左往右查找”。这个结论有些反直觉,我们来剖析一下原因。 - - 哨兵划分 `partition()` 的最后一步是交换 `nums[left]` 和 `nums[i]` ,完成交换后,基准数左边的元素都 `<=` 基准数,**这就要求最后一步交换前 `nums[left] >= nums[i]` 必须成立**。假设我们先“从左往右查找”,那么如果找不到比基准数更小的元素,**则会在 `i == j` 时跳出循环,此时可能 `nums[j] == nums[i] > nums[left]`** ;也就是说,此时最后一步交换操作会把一个比基准数更大的元素交换至数组最左端,导致哨兵划分失败。 - - 举个例子,给定数组 `[0, 0, 0, 0, 1]` ,如果先“从左向右查找”,哨兵划分后数组为 `[1, 0, 0, 0, 0]` ,这个结果是不对的。 - - 再深想一步,如果我们选择 `nums[right]` 为基准数,那么正好反过来,必须先“从左往右查找”。 - ## 算法流程 1. 首先,对数组执行一次「哨兵划分」,得到待排序的 **左子数组** 和 **右子数组**; @@ -366,3 +356,13 @@ ```zig title="quick_sort.zig" [class]{QuickSortTailCall}-[func]{quickSort} ``` + +!!! question "哨兵划分中“从右往左查找”与“从左往右查找”的顺序可以交换吗?" + + 不行,当我们以最左端元素为基准数时,必须先“从右往左查找”再“从左往右查找”。这个结论有些反直觉,我们来剖析一下原因。 + + 哨兵划分 `partition()` 的最后一步是交换 `nums[left]` 和 `nums[i]` ,完成交换后,基准数左边的元素都 `<=` 基准数,**这就要求最后一步交换前 `nums[left] >= nums[i]` 必须成立**。假设我们先“从左往右查找”,那么如果找不到比基准数更小的元素,**则会在 `i == j` 时跳出循环,此时可能 `nums[j] == nums[i] > nums[left]`** ;也就是说,此时最后一步交换操作会把一个比基准数更大的元素交换至数组最左端,导致哨兵划分失败。 + + 举个例子,给定数组 `[0, 0, 0, 0, 1]` ,如果先“从左向右查找”,哨兵划分后数组为 `[1, 0, 0, 0, 0]` ,这个结果是不对的。 + + 再深想一步,如果我们选择 `nums[right]` 为基准数,那么正好反过来,必须先“从左往右查找”。 diff --git a/docs/chapter_sorting/radix_sort.assets/radix_sort_overview.png b/docs/chapter_sorting/radix_sort.assets/radix_sort_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..a88b53ada949895a32e8aaadefc8f7ab2ba35d87 GIT binary patch literal 133308 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%0D?|95l(GFfCy_e)o#xr&#v|a%IiT9( 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 b$ ,则第二轮会取代第一轮的结果。由于数字高位比低位的优先级更高,所以要先排序低位再排序高位。 + +## 算法特性 + +**时间复杂度 $O(n k)$** :设数据量为 $n$ 、数据为 $d$ 进制、最大为 $k$ 位,则对某一位执行计数排序使用 $O(n + d)$ 时间,排序 $k$ 位使用 $O((n + d)k)$ 时间;一般情况下 $d$ 和 $k$ 都比较小,此时时间复杂度近似为 $O(n)$ 。 + +**空间复杂度 $O(n + d)$** :与计数排序一样,借助了长度分别为 $n$ , $d$ 的数组 `res` 和 `counter` ,因此是“非原地排序”。 + +与计数排序一致,基数排序也是稳定排序。相比于计数排序,基数排序可适用于数值范围较大的情况,**但前提是数据必须可以被表示为固定位数的格式,且位数不能太大**。比如浮点数就不适合使用基数排序,因为其位数 $k$ 太大,可能时间复杂度 $O(nk) \gg O(n^2)$ 。 diff --git a/mkdocs.yml b/mkdocs.yml index b1fd3feb..77b81d0e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -182,9 +182,10 @@ nav: - 11.3.   插入排序: chapter_sorting/insertion_sort.md - 11.4.   快速排序: chapter_sorting/quick_sort.md - 11.5.   归并排序: chapter_sorting/merge_sort.md - - 11.6.   计数排序(New): chapter_sorting/counting_sort.md - - 11.7.   桶排序(New): chapter_sorting/bucket_sort.md - - 11.8.   小结: chapter_sorting/summary.md + - 11.6.   桶排序(New): chapter_sorting/bucket_sort.md + - 11.7.   计数排序(New): chapter_sorting/counting_sort.md + - 11.8.   基数排序(New): chapter_sorting/radix_sort.md + - 11.9.   小结: chapter_sorting/summary.md - 12.     附录: - 12.1.   编程环境安装: chapter_appendix/installation.md - 12.2.   一起参与创作: chapter_appendix/contribution.md