理解计数排序https://www.cnblogs.com/kaituorensheng/archive/2013/02/23/2923877.html
- 计数排序是有效的,如果输入数据的范围是不显著大于数字的个数。
- 它不是一个基于比较的排序。它运行的时间复杂度为O(n)
- 它经常被用来作为另一个排序算法像基数排序的一个子程序。
- 计数排序可以扩展到负输入也可以。
using namespace std; #include<string.h> #include<assert.h> #include <algorithm> #include <iostream> void CountSort(char* arr, int len) { assert(arr); assert(len > 0); int min = arr[0]; int max = arr[0]; for (int i = 1; i < len; i++) { if (arr[i]>max) max = arr[i]; //找出序列中最大的值 if (arr[i] < min) min = arr[i]; //找出序列中最大的值 } int range = max - min + 1; //开辟range大的空间 int* count = new int(range); memset(count, 0, sizeof(int)*range); //初始化为0 for (int i = 0; i < len; i++) { count[arr[i] - min]++; //arr[0]=5,min=1 count[4]=1, arr[1]=1,min=1 count[0],初始化为1 } //count[2]=0;count[5]=0 int j = 0; for (int i = 0; i < range; i++) { while (count[i]--) // count[2]=0时吗,不能进入,进行i+1 arr[j++] = i + min; //arr[2]=(i+1)+1=4 } } int main(){ char arr[] = "512784"; int len = sizeof(arr) - 1; CountSort(arr, len); cout << len << endl; cout << arr << endl; system("pause"); return 0; }