準備工作
首先,先把自己當成小學生,盡量把自己變得笨一點不要想太多, counting sort沒有任何奇淫技巧, 小學畢業就行
開始
今天我去上小學, 老師給了你一堆數字, 叫你把這些數字個別計數有多少個, 因為我記憶力不好, 所以最簡單的方式就是我就畫正字記號囉, 如圖:
現在要你做一件事情, 看著表格然後你做以下事情:
- 1有2個, 把1寫出來寫2次
- 2有0個不用寫
- 3有3個, 把3寫出來寫3次
- 4有2個, 把4寫出來寫4次
以此類推寫到13
很神奇的你把數字排序好了, 你學會Counting sort了
C++ 實作
來到實作的階段啦, 這時候就要把頭腦變聰明, 以下是C++實作, 如果你說你看懂上面的過程卻寫不出來, 那就是程式實作能力的問題了, 要多去加強實作能力
以下程式來自演算法筆記
#include<iostream>
using namespace std;
#define LENGTH 23
#define MAX_ELEMENT 13
int main()
{
int array[LENGTH] = {1,12,9,3,6,1,9,3,3,8,8,13,10,4,4,6,5,5,5,12,10,11,9};
int count[MAX_ELEMENT+1] = {0};
//計數1-13的個數
for(int i = 0 ; i < LENGTH ; i++)
{
count[array[i]]++;
}
for(int i = 0, j= 0 ; i <= MAX_ELEMENT && j < LENGTH ; j++)
{
while(count[j] > 0)
{
count[j]--;
array[i++] = j;
}
}
return 0;
}