常用排序演算法 計數排序

2021-08-29 20:38:05 字數 776 閱讀 2961

顧名思義計數排序就是統計每個數出現的次數,例如給0-20範圍內的數排序,首先建立乙個長度為21的空陣列,然後統計每個數出現的次數,再按照下標存入空陣列中,例如1出現10次那麼陣列中的第二個元素為10 ,統計完所有的數之後呢在新建乙個陣列,在遍歷之前存放次數的陣列,按照個數往新陣列中新增對應的數。

以乙個例子來說明[1,2,3,1,0,4,1,3,4,2,0,1,2,3,4]排序過程如下圖所示

計數排序雖然時間複雜度小o(n),但是侷限性很大,首先是需要知道最大數是多少,其次當無序列表分布很分散例如[1,3,1000000],明明只有三個數但是卻需要開闢乙個長度為1000000的空列表,會造成空間浪費。所以計數排序只適合在特定的情況下使用。

def count_sort(nums, max_num):

"""計數排序

:param nums: 無序陣列

:param max_num: 最大數

"""count = [0 for x in range(max_num+1)] # 新建乙個統計陣列

for i in nums: # 計數

count[i] += 1

nums.clear() # 清空原有陣列

for c, i in enumerate(count): # 往空陣列中新增元素

while i > 0:

i -= 1

演算法 排序 計數排序

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。計數排序 counting sort 是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i...

演算法 排序 計數排序

計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列 輔助空間陣列的初始都是0 中找到對應元素的下標位置,將該位置的元素 掃瞄下標,將對應不為0的下標記錄賦值給原陣列,然後對應下標元素 圖例分析 具體 includevoid countsort int a,int len int m...

常用排序之計數排序

計數排序是一種非比較排序演算法。計數排序假設n個輸入元素中的每乙個都是在0到k區間內的乙個整數,其中k為某個整數。計數排序是穩定的。基本思想 對每乙個輸入元素x,確定小於x的元素個數。利用這一資訊,就可以直接把x放到它在輸出陣列中的位置上了。例如,如果有17個元素小於x,則x就應該在第18個輸出位置...