计数排序
1.统计相同元素出现的个数 2.根据统计结果将序列回收到原来的序列中
整体思路如下图:
void CountSort(int* a3, int n)
{
int min = 0;
int max = 0;
int i = 0;
while (i < n)//记录最大最小值
{
if (min > a3[i])
{
min = a3[i];
}
if (max < a3[i])
{
max = a3[i];
}
i++;
}
int count = max - min + 1;//判断最大最小值的差值
int* a = new int[count];//开空间
memset(a, 0 ,sizeof(int) * count); //记得将原空间清空
for (int i = 0; i < n; i++)
{
a[a3[i] - min]++;//给B数组每个下标赋值
}
int j = 0;
int q = 0;
while (q < count)
{
while (a[q]-- > 0)
{
a3[j++] = q + min;//将B中的数依次赋给A
}
q++;
}
}
特点总结:
1.在数据较为集中时,效率较高,适用范围有限
2.时间复杂度(o 范围)
3.空间O(范围)
4.稳定性:稳定