演算法的步驟如下:對於資料2 5 3 0 2 3 0 3程式執行的過程如下圖所示:(1) 找出待排序的陣列中最大和最小的元素
(2)統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項
(3)對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加)
(4)反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1
#計數排序
def countsort(listdata):
maxdata = max(listdata)
c = [0 for i in range(0, maxdata + 1)]
for i in listdata:
c[i] = c[i] + 1
for i in range(1, len(c)):
c[i] = c[i - 1] + c[i]
b = [0] * len(listdata)
n = len(listdata)
for i in range(n):
s = n - i - 1
b[c[listdata[s]] -1] = listdata[s]
c[listdata[s]] = c[listdata[s]] - 1
print(b)
if __name__ == "__main__":
listdata = [3,3,6,9,8,1,4]
countsort(listdata)
優點:當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 θ(n + k)。計數排序不是比較排序,排序的速度快於任何比較排序演算法。
缺點:由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍(等於待排序陣列的最大值與最小值的差加上1),這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。
python計數排序 Python 計數排序
1.python coding utf 8 def counting sort a,b,k 計數排序,偽碼如下 counting sort a,b,k 1 for i 0 to k 初始化儲存區的值 2 do c i 0 3 for j 1 to length a 為各值計數 4 do c a j ...
排序演算法08 計數排序 Python實現
計數排序所計的數是列表中小於等於當前數的個數 a 要排序的列表 b 計數列表 c 存放排序結果的有序列表 max a中的最大值 具體過程 既然需要乙個max 1長度的列表,那就需要知道max了,第一步就是遍歷列表a,找到max 定義b max 1 遍歷a,b a i 1,即a中的元素如果出現一次,b...
演算法 排序 計數排序
計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。計數排序 counting sort 是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i...