python演算法總結(三) 計數排序

2021-09-25 02:40:09 字數 1116 閱讀 4402

演算法的步驟如下:

(1) 找出待排序的陣列中最大和最小的元素

(2)統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項

(3)對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加)

(4)反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1

對於資料2 5 3 0 2 3 0 3程式執行的過程如下圖所示:

#計數排序

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...