演算法 排序 計數排序

2021-10-03 12:06:13 字數 1257 閱讀 8449

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。

計數排序(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.待排序列在一定的取值範圍內。利用已有陣列構造額...