void CountSort(int *a,int n) {
// 找出最大数和最小数,确定序列的范围
int max = a[0];
int min = a[0];
for (int i = 0; i < n; ++i) {
if (a[i] > max) {
max = a[i];
}
if (a[i] < min) {
min = a[i];
}
}
// rang为序列的范围,开辟额外数组,初始化全为 0
int rang = max - min + 1;
int* CountArr = (int*)malloc(sizeof(int) * rang);
for (int i = 0; i < rang; ++i)
CountArr[i] = 0;
// 进行计数
for (int i = 0; i < n; ++i) {
CountArr[a[i] - min]++;
}
// 将序列拷贝回原序列
int j = 0;
for (int i = 0; i < rang; ++i) {
while (CountArr[i]--) {
a[j++] = i + min;
}
}
}
计数排序
最新推荐文章于 2023-11-25 14:02:51 发布