計數排序簡單實現

2021-06-05 21:50:05 字數 1139 閱讀 7609

(嘮叨完乙個**,開始寫計數排序這個簡單的線性排序演算法。)

原理很簡單,繼續wiki(之……

當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 θ(n + k)。計數排序不是比較排序,排序的速度快於任何比較排序演算法。

由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍(等於待排序陣列的最大值與最小值的差加上1),這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。例如:計數排序是用來排序0到100之間的數字的最好的演算法,但是它不適合按字母順序排序人名。但是,計數排序可以用在基數排序中的演算法來排序資料範圍很大的陣列。

演算法的步驟如下:

找出待排序的陣列中最大和最小的元素

統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項

對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加)

反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1

不過在測試中出了個小bug,存放順序沒有留意到不同(見**注釋),太馬大哈了……

**如下:

#include #include using namespace std;

#define array_size 100

#define value_size 10001

int data[array_size];

int b[array_size];

int c[value_size];

void countingsort(int data, int size, int k)

for (i = 0; i < size; i++)

for (i = 1; i < k; i++)

for (i = 0; i < size; i++) }

void printn(int data, int size)

cout << endl;

} void getn(int data, int size) }

int main()

getn(data, size);

countingsort(data, size, k);

printn(b, size);

} return 0;

}

計數排序 C 實現

一 演算法描述 插入排序 選擇排序 氣泡排序 歸併排序 堆排序以及快速排序都是比較排序演算法 各元素之間的次序依賴於他們之間的比較。在最壞情況下,任何比較排序演算法都需要做 nlgn 次比較。因此堆排序和歸併排序都是漸進最優的比較排序演算法。計數排序不是一種比較排序演算法,二是基於運算來確定元素的排...

計數排序 java實現)

計數排序常用於純數字的排序,速度很快,也很實用 小資料採用計數排序,空間換時間 package sort 計數排序 常用於數字排序 用空間換時間策略 public class countintegersort int min findmin arr int max findmax arr int c...

計數排序java實現

計數排序 1.基本思想 計數排序是乙個非基於比較的排序演算法,該演算法於1954年由 harold h.seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的效能甚至快於哪些o nlogn 的排序演算法。思路是開乙個長度為 maxvalue minvalue 1 的陣列,然後 分配。掃瞄一...