计数排序
计数排序是基于比较的排序算法,优势在于对一定范围内的整数排序时,它快于任何比较算法。计数排序对输入的数据有附加的限制条件。
1.输入的线性表的元素属于有限偏序集S;
2.设输入的线性表的长度为n,|S|=k(k表示几何S中元素的总数目为k),k=O(n)
算法步骤:
- 扫描整个集合S,对每一个Si∈S,找到在线性表中小于等于Si的元素个数T(Si)
- 搜索整个线性表L,对L中的每一个元素Li, 将Li放在输出线性表的第T(Li)个位置上,并将T(Li)减1.
代码实现:
C++代码:
void counting_sort(int num[], int len, int k){
int *count = new int[k + 1];
int *temp = new int[len];
for(int i = 0; i < k+1; i++)
count[i] = 0;
for(int j = 0; j < len; j++)
count[num[j]]++;
for (int i = 1; i < k+1; i++)
count[i] += count[i-1];
for(int j = 0; j < len; j++){
temp[count[num[j]]-1] = num[j];
count[num[j]]--;
}
for(int i = 0; i < len; i++)
num[i] = temp[i];
delete[] count;
delete[] temp;
}