计数排序
<span style="font-size:18px;">//获取数组中最大值
size_t GetMaxNum(int* arr, int len)
{
assert(arr && len > 0);
int i = 0;
int maxNum = arr[i++];
for (; i<len; ++i)
{
if (maxNum < arr[i])
{
maxNum = arr[i];
}
}
return maxNum;
}
//计数排序
void CountSort(int* arr,int len)
{
assert(arr && len > 0);
//获取要开辟的临时空间的大小
int Capacity = GetMaxNum(arr, len);
int* tmp = new int[Capacity + 1];
int i = 0;
//初始化临时数组
for (i = 0; i <= Capacity; ++i)
{
tmp[i] = 0;
}
//统计数组中每个数的个数
for (i = 0; i < len; ++i)
{
++tmp[arr[i]];
}
//从临时开辟的空间中按照次数打印下标(下标n即数组中的数)
i = 0;
int n = 0;
for (n = 0; n <= Capacity; ++n)
{
while (tmp[n]--)
{
arr[i] = n;
++i;
}
}
cout << endl;
delete[] tmp;
}</span>