博客:小怡同学
个人简介:编程小萌新
如果博客对大家有用的话,请点赞关注再收藏
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
void CountSort(int* a, int size)
{
int min = a[0];
int max = a[0];
for (int i = 0; i < size; i++)
{
if (min > a[i])
{
min = a[i];
}
if (max < a[i])
{
max = a[i];
}
}
int range = max - min + 1;
int* arr = (int*)malloc(sizeof(int) * range);
for (int i = 0; i < range; i++)
{
arr[i] = 0;
}
for (int i = 0; i < size; i++)
{
arr[a[i] - min]++;
}
int index = 0;
for (int i = 0; i < range ; i++)
{
while(arr[i]--)
{
a[index++] = i + min;
}
}
}
时间复杂度为O(N+k)