演算法之計數排序(Counting Sort)

2021-09-11 01:46:59 字數 926 閱讀 8872

計數排序的核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 

作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。

計數排序(counting sort)是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。

然後根據陣列c來將a中的元素排到正確的位置。它只能對整數進行排序。

* 計數排序

** @param array

* @return

*/public static int countingsort(int array)

bias = 0 - min;

int bucket = new int[max - min + 1];

arrays.fill(bucket, 0);

for (int i = 0; i

int index = 0, i = 0;

while (index

i++;

}return array;

}當輸入的元素是n 個0到k之間的整數時,它的執行時間是 o(n + k)。

計數排序不是比較排序,排序的速度快於任何比較排序演算法。

由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍(等於待排序陣列的最大值與最小值的差加上1),這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。

最佳情況:t(n) = o(n+k)

最差情況:t(n) = o(n+k)

平均情況:t(n) = o(n+k)

演算法之計數排序

核心思想 通過計算某個資料之前有多少個資料來確定自身的位置,不通過資料之間的相互比較,所以是非比較排序。原始計數排序 時間複雜度 o n k k為資料量 缺點 如果資料只有兩個,9999,10000,那麼會額外建立容量為10000的陣列,浪費空間。public static int countsor...

演算法之計數排序

原理 用乙個陣列記錄待排序陣列 現的數字。最低位代表最小值,偏移量是記錄陣列中的下標 待排序陣列 2 1 4 可以表示為 記錄陣列 1 1 0 1 陣列長度為 4 1 1 然後根據記錄陣列輸出結果 public static void countsort int arr if arr.length ...

排序演算法之計數排序

今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。參考資料 對於僅由大寫字母 或小寫字母 構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素...