1. 程式人生 > >基礎資料結構與演算法之非比較排序一:計數排序

基礎資料結構與演算法之非比較排序一:計數排序

要想深入理解一個東西,必須要清楚的知道來龍去脈。知道好在哪裡,不好在哪裡。適用於什麼應用場景。

    對於演算法,最基本的效能指標是時間複雜度和空間複雜度。計數排序時間複雜度是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;


}