Python實現排序演算法

2021-10-05 01:24:16 字數 2692 閱讀 6862

一.基數排序

最高位優先法,簡稱msd法:先按k1排序分組,同一組中記錄,關鍵碼k1相等,再對各組按k2排序分成子組,之後,對後面的關鍵碼繼續這樣的排序分組,直到按最次位關鍵碼kd對各子組排序後。再將各組連線起來,便得到乙個有序序列。

最低位優先法,簡稱lsd法:先從kd開始排序,再對kd-1進行排序,依次重複,直到對k1排序後便得到乙個有序序列。

穩定性:

基數排序是一種穩定排序演算法

時間複雜度:

基數排序時間複雜度為o (n*k)

空間複雜度:

基數排序空間複雜度為o (n+k)

**如下:

import math

defsort

(a, radix=10)

:"""a為整數列表, radix為基數"""

k =int(math.ceil(math.log(

max(a)

, radix)))

# 用k位數可表示任意整數

bucket =[[

]for i in

range

(radix)

]# 不能用 *radix

for i in

range(1

, k+1)

:# k次迴圈

for val in a:

bucket[val%

(radix**i)

/(radix**

(i-1))

]# 析取整數第k位數字 (從低到高)

del a[:]

for each in bucket:

a.extend(each)

# 桶合併

bucket =[[

]for i in

range

(radix)

]

二.計數排序
def

sort

(a):

n=len(a)

b=[none]*n

for i in

range

(n):

p=0 q=

0for j in

range

(n):

if a[j]

: p+=

1elif a[j]

==a[i]

: q+=

1for k in

range

(p,p+q)

: b[k]

=a[i]

print b

三.桶排序

將陣列分到有限數量的桶子裡。每個桶子再個別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序)。

桶排序假設輸入由乙個隨機過程產生,該過程將元素分布在區間[0,1)上。 桶排序的思想就是把區間[0,1)劃分成n個相同大小的子區間,或稱桶,然後將n個輸入數分布到各個桶中去。因為輸入數均勻分布在[0,1)上,所以一般不會有很多數落在乙個桶中的情況。為得到結果,先對各個桶中的數進行排序,然後按次序把各桶中的元素列出來即可。

穩定性:

桶排序是一種穩定排序演算法

時間複雜度:

桶排序時間複雜度為o(n)到o(n2)(平均時間複雜度為o (n+k))

空間複雜度:

桶排序空間複雜度為o (n+k)

**如下:

def

bucket_sort

(array, n)

:# 1.建立n個空桶

new_list =[[

]for _ in

range

(n)]

# 2.把arr[i] 插入到bucket[n*array[i]]

for data in array:

index =

int(data * n)

new_list[index]

# 3.桶內排序

for i in

range

(n):

new_list[i]

.sort(

)# 4.產生新的排序後的列表

index =

0for i in

range

(n):

for j in

range

(len

(new_list[i]))

: array[index]

= new_list[i]

[j] index +=

1return array

defmain()

: array =

[0.897

,0.565

,0.656

,0.1234

,0.665

,0.3434

] n =

len(array)

array = bucket_sort(array, n)

print

(array)

if __name__ ==

'__main__'

: main(

)

排序演算法python實現

先列出一些演算法複雜度的識別符號號的意思,最常用的是o,表示演算法的上屆,如 2n2 o n2 而且有可能是漸進緊確的,意思是g n 乘上乙個常數係數是可以等於f n 的,就是所謂的a b。而o的區別就是非漸進緊確的,如2n o n2 o n2 確實可以作為2n的上屆,不過比較大,就是所謂的a其他符...

python排序演算法實現

coding utf 8 氣泡排序 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大 公升序 就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步...

Python實現排序演算法

一.氣泡排序 該排序重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。穩定性 氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交...