計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。
計數排序(counting sort)是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。它只能對整數進行排序。
找出待排序的陣列中最大和最小的元素;
統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項;
對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加);
反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1。
當輸入的元素是n個0到k之間的整數時,它的執行時間是 o(n + k)。計數排序不是比較排序,排序的速度快於任何比較排序演算法。由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍(等於待排序陣列的最大值與最小值的差加上1),這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。
排序方式:out-place
時間複雜度:
最佳情況:t(n) = o(n+k)
最差情況:t(n) = o(n+k)
平均情況:t(n) = o(n+k)
空間複雜度:o(k)
}// 2、建立最大值長度的陣列
int arrc = new int[arrs[index] + 1];
// 3、對待排序陣列進行反相統計
for (int i = 0; i < arrs.length; i++)
// 4、排序輸出
index = 0;
for (int i = 0; i < arrs.length; i++)
index++;}}
}
演算法 排序 計數排序
計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列 輔助空間陣列的初始都是0 中找到對應元素的下標位置,將該位置的元素 掃瞄下標,將對應不為0的下標記錄賦值給原陣列,然後對應下標元素 圖例分析 具體 includevoid countsort int a,int len int m...
計數排序演算法
countsort.c include include include typedef int datatype typedef char numtype 有效個數 2至127 2 sizeof numtype 8 1 1 define limit numtype 1 sizeof numtype ...
計數排序演算法
計數排序利用空間換取時間,實現了時間複雜度為o n k k表示待排序列的最大值 的高效排序,在一定範圍數值的排序中,比快速排序 堆排序更快。1.只適用於對整數排序。因為計數排序需要通過下標確定整數在新陣列中的下標,如果不為整數,那麼下標也就無法確定 2.待排序列在一定的取值範圍內。利用已有陣列構造額...