計數排序(Counting Sort)是一種非常簡單的排序算法,用來對一個序列進行排序,它也是基數排序的一個關鍵部分。這兩個算法都是Harold Seward發明的。
計數排序主要用於對元素值大於等於0的整數元素序列進行排序,也可以擴展到對負整數的元素序列的排序。
計數排序比普通的排序算法性能更好。例如,輸入{1, 3, 5, 2, 1, 4},用計數排序會輸出{1, 1, 2, 3, 4, 5}。
計數排序算法描述:
(1)初始化一個計數數組,大小是輸入數組中的最大的數。
(2)遍歷輸入數組,遇到一個數就在計數數組對應的位置上加一。例如:遇到5,就將計數數組第五個位置的值增1。
(3)把計數數組直接覆蓋到輸出數組(節約空間)。
輸入{3, 4, 3, 2, 1},最大是4,數組長度是5。
建立計數數組{0, 0, 0, 0}。
這樣就排好序了。
時間:O(n + k),n是輸入數組長度,k是最大的數的大小。
空間:O(n + k),n是輸入數組長度,k是最大的數的大小。
C實現
#include <stdio.h>
#include <string.h>
#define RANGE 255
// The main f