今天来简单说一下计数排序:
当要实现一个排序算法要求时间复杂度是O(n),允许使用常量大小的辅助空间,并且数据的大小在一个可控的范围内,就可以使用计数排序了,也就是辅助数组的大小记录数据的个数,然后输出即可;
算法实现:
1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 5 void countSort(int *data, int length){ 6 if(data == NULL || length < 0){ 7 return; 8 } 9 10 const int num = 60; 11 int counter[num + 1]; 12 13 for(int i = 0; i <= num; ++i){ //初始化每个数组元素 14 counter[i] = 0; 15 } 16 17 for(int i = 0; i < length; ++i){ 18 int tags = data[i]; 19 if(tags < 0 || tags > 60){ 20 cout<<"invalid number"<<endl; 21 } 22 23 ++counter[tags]; //记录数组中每个元素的个数 24 } 25 26 27 int index = 0; 28 29 for(int i = 0; i <= num; ++i){ //将记录的值付给初始的数组,即排好序的数组了 30 for(int j = 0; j < counter[i]; ++j){ 31 data[index] = i; 32 ++index; 33 } 34 } 35 } 36 37 int main(){ 38 int str[1000]; 39 for(int i = 0; i < 1000; i++){ 40 str[i] = rand() % 60; //随机数产生1000个在0~59之间的数字,进行测试 41 } 42 43 countSort(str, 1000); 44 45 for(int i = 0; i < 1000; i++){ 46 cout<<str[i]<<' '; 47 } 48 49 return 0; 50 }