基础数据结构与算法之非比较排序一:计数排序

要想深入理解一个东西,必须要清楚的知道来龙去脉。知道好在哪里,不好在哪里。适用于什么应用场景。

    对于算法,最基本的性能指标是时间复杂度和空间复杂度。计数排序时间复杂度是O(n+range),计数排序要经过两个遍历。由于要申请range个空间,所以空间复杂度是O(range)。将待排序的数组对应于临时数组的下标,比如待排序数组:1   7    2,那么可以申请一个数组int num[8]={0};那么num[1]=1;  num[2]=1;   num[7]=1;再将非零的num数组对应的下标进行输出即完成了排序功能。

    #include<cstdio>
#include<cstring>
int main()
{
int n, x, c[101];
while (scanf_s("%d", &n) == 1 && n)
{
memset(c, 0, sizeof(c));
for (int i = 0; i < n; i++)
{
scanf_s("%d", &x);
c[x]++;
}
int first = 1;
for (int i = 1; i <= 100; i++)
{
for (int j = 0; j < c[i]; j++)
{
if (!first)
printf(" ");
first = 0;
printf("%d", i);
}
}
printf("\n");
}
return 0;


}

猜你喜欢

转载自blog.csdn.net/liqiming100/article/details/79342428