几种常用的排序方法6--计数排序
计数排序
计数排序不同于前面所有的排序,它并不是一种比较排序。
计数排序假设输入元素中每一个都是介于0到k之间的整数,计数排序运行时间是O(n);
计数排序的基本思想是:对每一个输入的元素x,统计出小于x的元素个数,然后可以把x直接放到输出数组中。例如有5个元素小于x,那么x就是数组中第6个元素B[5]。
1 void Counting_Sort(int * A, int * B,int n, int k) 2 {//A是原始数组,B用来存数排序后的结果,n是数组长度,k是所有元素范围上限 3 int C[k+1]; 4 for(int i = 0; i < k; i++) 5 { 6 C[i] = 0; //初始化 7 } 8 for(int j = 0; j < n; j++) 9 { 10 C[A[j]] = C[A[j]] + 1; //C[i]包含等于i的元素个数 11 } 12 for(int i = 0; i < k; i++) 13 { 14 C[i+1] = C[i+1] + C[i]; //C[i]包含小于或等于1的个数 15 } 16 for(int j = 0; j < n; j++) 17 { 18 B[C[A[j]] - 1] = A[j]; 19 C[A[j]] = C[A[j]] - 1; 20 } 21 }