一、原理
計數排序的核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。
步驟:(1)建立關鍵值(計數列表)
(2)遍歷序列中的每乙個元素,相應的計數器增加1
(3)重新將元素儲存列表中
二、實現
假如現在有乙個列表,已知列表中的數的範圍在0-200之間,請設計演算法將列表進行排序。
def參考:countsort(li,max_num):
count=[0 for i in range(max_num+1)] #
for num in
li: count[num]+=1 #
num表示數值,也表示列表索引,count[num]表示num的個數
li.clear()
for i,t in enumerate(count): #
i表示數值,t表示數值的個數
for j in
range(t):
import
random
li=[random.randint(0,200) for i in range(10000)]
countsort(li,200)
print(li)
排序演算法之計數排序
今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。參考資料 對於僅由大寫字母 或小寫字母 構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素...
演算法 排序之計數排序
最近想到演算法導論中的計數排序,看看理解的怎麼樣試著講講自己的理解。1 思想 計數排序 是 線性時間的 排序演算法,時間複雜度為o n 雖然有一定的侷限性。但是還是很好的一種演算法。用2個陣列進行額外的儲存資訊,陣列 c 是對 資料中值相同的 記錄下來,以便後面查閱 b 是輸出的有序陣列,再將有序的...
排序演算法之計數排序
計數排序的思想特別簡單,就是記錄下序列中每個元素出現的次數,然後根據儲存次數的下標及出現次數將元素放回原陣列。時間複雜度為o n 資料範圍 空間複雜度為o 最大數 最小數 實現 pragma once int findmax int array,const int size return max i...