计数排序
目录
概念
一个非基于比较的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法。
思路
计数排序对输入的数据有附加的限制条件:
1、输入的线性表的元素属于有限偏序集 S;
2、设输入的线性表的长度为 n,|S|=k(表示集合 S 中元素的总数目为 k),则 k=O(n)。
在这两个条件下,计数排序的复杂性为O(n)。
代码
int * countingSort1(int arr[],int count,int max) {
int index = 0;
int *tmpArr = (int *)malloc(max*sizeof(int));
int *result = (int *)malloc(max*sizeof(int));
for(int k = 0;k<max;k++) {
tmpArr[k] = 0;
}
for (int i = 0; i<count; i++) {
tmpArr[arr[i]]++;
}
for (int j = 0; j<max; j++) {
while (tmpArr[j]) {
result[index++] = j;
tmpArr[j]--;
}
}
free(tmpArr);
tmpArr = NULL;
return result;
}