實現穩定的計數排序

2021-10-11 12:20:30 字數 1121 閱讀 1958

對於給定整數數列,我們可以採取歸併排序將其整理成乙個有序數列。然而,其時間複雜度為o(n)=nlogn。若給出乙個數列,其元素在數軸上分布「密集」,則我們不必使用歸併排序,而可以用歸併排序。

​ 使用計數排序來對這個列表進行排序。其時間複雜度為o(n)=(n+m),空間複雜度為o(m)。其中n為數列長度,m為數列中最大元素與最小元素之差。

​ 在面對分布密集的元素時,可以有效減少運算所需的時間,但是,為了實現穩定的計數排序,我們需要建立乙個二維列表來儲存物件的位置,且第二維表現為乙個佇列。

​ 綜上,計數排序適合密集分布的列表,尤其是m為了使實現簡潔直觀,在程式中我們要將一些元組進行排序,其第0個元素作為實際大小,第1個元素作為其「標籤」。在其他情況中,可以先實現相應類的比較器,再進行比較。

counting_sort

def counting_sort(a):

max=a[0][0]

min=a[0][0]

#遍歷取得最大值

for i in range(len(a)):

if a[i][0]>max:

max=a[i][0]

if a[i][0]=[(

9,1)

,(4,

1),(

5,1)

,(6,

1),(

9,2)

,(8,

1),(

1,1)

,(1,

2),(

9,3)

,(4,

2),(

7,1)

,(4,

3),(

2,1)

]output=counting_sort(inputlist)

print

("input list:"

,inputlist)

print

("sorted lis:"

,output)

輸出結果

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-nhzoeork-1607259317808)(穩定的計數排序實現.assets/測試.png)]

可見我們實現了穩定的計數排序

可見我們實現了穩定的計數排序

計數排序與穩定排序

我們常用的排序演算法,有冒泡演算法 快速演算法等,它們都是基於元素之間的比較來進行排序,有一種特殊的演算法不是基於元素比較,而是利用陣列下標來確定元素在陣列的位置,這種演算法就是 計數排序 先來說一下實現的原理,假設有20個隨機整數的陣列array,他們值分別是 9,3,5,4,9,1,2,7,8,...

排序演算法 最穩定的計數排序

有沒有一種排序演算法的時間複雜度為o n 呢?如果面試官這麼問你,千萬不要直接否定!事實上是有線性時間複雜度的排序演算法,只不過其使用條件有限,只能是滿足條件的整數 0 n 序列,而且需要一定的輔助空間。這就是我們即將要提到的 計數排序。對於排序演算法來說計數排序是穩定的,跟桶排序相比其所占用的空間...

穩定版計數排序

相比樸素版計數排序,可以保證排序後陣列中相等元素原本的先後順序不變。class solution 2.建立統計陣列並統計對應元素個數 int m maxval minval 1 vector int temp m for int i 0 i 3.統計陣列做變形,後面的元素等於前面的元素之和 int ...