排序演算法08 計數排序 Python實現

2021-09-17 04:45:39 字數 1112 閱讀 7387

計數排序所計的數是列表中小於等於當前數的個數

a:要排序的列表

b:計數列表

c:存放排序結果的有序列表

max:a中的最大值

具體過程

既然需要乙個max+1長度的列表,那就需要知道max了,第一步就是遍歷列表a,找到max

定義b = *(max+1),遍歷a,b[a[i]] += 1,即a中的元素如果出現一次,b中對應下標的元素加一

這樣得到的b中的元素b[n]含義為n在a**現的次數,並不是我們要的小於等於n的數的個數

只要讓b[n] = b[0]+b[1]+……+b[n],就能達到目的

有序列表中小於等於該元素的個數不就是該元素在列表中的位置+1嗎

倒序遍歷a,將a[i]放到c[b[a[i]-1]中

"""計數排序"""

a = [9, 78, 54, 91, 86, 53, 88, 66, 46, 15]

"""b列表長度為a中最大的數+1,存放的元素是該位置代表的數在a**現的次數"""

max = 0

for i in a:

if i > max:

max = i

b = [0]*(max+1)

"""遍歷a中的元素,將b中對應位置+1"""

for i in a:

b[i] += 1

"""修改b列表的含義,讓其元素代表a中小於等於該位置代表的數的個數"""

"""count 記錄總數"""

count = 0

for i in range(len(b)):

count += b[i]

b[i] = count

"""建立列表c存放排序後的結果"""

c = [0]*(len(a))

"""倒序遍歷a列表,保證演算法的穩定性"""

for i in a[::-1]:

c[b[i]-1] = i

b[i] -=1

print(c)

演算法 排序 計數排序

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

演算法 排序 計數排序

計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列 輔助空間陣列的初始都是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 ...