python排序演算法實現

2021-09-25 14:00:06 字數 1726 閱讀 5795

# coding=utf-8

# 氣泡排序

'''氣泡排序演算法的運作如下:

比較相鄰的元素。如果第乙個比第二個大(公升序),就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

'''def bubble_sort(alist):

for j in range(len(alist)-1, 0, -1):

# j表示每次遍歷需要比較的次數,是逐漸減小的

for i in range(j):

if alist[i] > alist[i+1]:

alist[i], alist[i+1] = alist[i+1], alist[i]

li = [54,26,93,17,77,31,44,55,20]

bubble_sort(li)

print(li)

a = [5, 6, 3, 2, 1, 65, 2, 0, 8, 0]

# bubble_sort(a)

# print(a)

# coding=utf-8

# 桶排序演算法

'''桶排序的基本思想是將乙個資料表分割成許多buckets,然後每個bucket各自排序,或用不同的排序演算法,

或者遞迴的使用bucket sort演算法。也是典型的divide-and-conquer分而治之的策略。

它是乙個分布式的排序,介於msd基數排序和lsd基數排序之間

1、桶排序是穩定的

2、桶排序是常見排序裡最快的一種, 大多數情況下比快排還要快

3、桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序演算法

'''def bucket_sort(a):

max_num = max(a)

print(max_num)

bucket = [0]*(max_num + 1)

print('bucket = ', bucket)

for i in a:

bucket[i] += 1

print('bucket = ', bucket)

sort_num =

for j in range(len(bucket)):

print('*' * 20)

print('j 1 = %s -- bucket[j] = %s'% (j, bucket[j]) )

if bucket[j] != 0:

for k in range(bucket[j]):

print('j = ', j)

print('sort_num = ', sort_num)

print('sort_num = ', sort_num)

bucket = [2, 1, 2, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

a = [5, 6, 3, 2, 1, 65, 2, 0, 8, 0]

bucket_sort(a)

排序演算法python實現

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

Python實現排序演算法

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

Python實現排序演算法

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