# 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進行排序...