1. 计数排序
已知输入数组input[0...n-1], 任意 x IN input[], 如果已知有C[x]个数 <= x,那么 x 应该放在第 C[x] 个位置
例如:10个5岁以下的小朋友按照年龄排序,如果知道 <= 3岁的小朋友有6个,那么年龄为3岁的小朋友应该站在第6个位置。
1 #define MAX 10 2 #define key(x) x 3 int C[MAX]; 4 5 void counting_sort(int input[], int output[], int n, int k) 6 { 7 int i, j; 8 9 for (j = 0; j < n; j++) 10 C[key(input[j])]++; 11 12 for (i = 1; i < k; i++) 13 C[i] = C[i] + C[i - 1]; 14 15 for (j = n - 1; j >= 0; j--) 16 { 17 output[C[key(input[j])] - 1] = input[j]; 18 C[key(input[j])]--; 19 } 20 }
优点:
1、稳定排序
2、时间复杂度O(n)
缺点:
待排序数组元素介于[0, k]之间,当k很大时需要占用大量空间,限制了计数排序的使用范围。
时间: 2024-11-05 11:50:58