数据较小或较为密集时适用,但耗费空间。
计数排序是把原数组的值看作下标,并填入构造的辅助数组,其中辅助数组大小为原数组最大值。
对大于0的数适用
void countsort(int ar[], int length){
int* help = malloc(sizeof(max(ar)));//调用max函数(本例未写出)求数组最大值以动态分配
for (int e = 0; e < length;e++) {
help[ar[e]]++;//把原数组值变成辅助数组下标
//其中的++,是如果有重复的,它进行一次后是1,而再次遇到的话,就再自增一次,变成二
}
//数据回填
int current = 0;
//一共有length个数
for (int i = 0; i < 辅助数组(help)长度; i++) {
//遍历出现次数大于0次的
while (help[i] > 0) {
ar[current++] = i;//进行回填,即下标就是数
help[i]--;//比如原来记得出现2次,那么刚才找到一个,所以它得减1
}
}
}