python實現排序
1.氣泡排序
將相鄰的兩個數兩兩比較,每次外迴圈都將最大的數移到最後,
氣泡排序是最慢的排序演算法,實際運用中效率最低,
當數列為由小到大的有序數列時為最好情況,當由大到小時為為最壞情況。
def bubble_sort(alist):
count = 0
# 遍歷每一趟比較的次數,每走一趟能得出右邊的乙個最大值,比較的次數就遞減
for j in range(len(alist)-1,0,-1):
flag = false #flag運用於冒泡出現最優情況的時候,如果第一趟沒有交換任何數,那麼就不需要後面的趟數
# 遍歷當前趟從索引0開始比較完當前次數
for i in range(j):
if alist[i] > alist[i+1]:
alist[i],alist[i+1] = alist[i+1],alist[i]
flag = true
count+=1
if flag == false:
break
print(alist,count)
list = [54,26,93,17,77,31,44,55,20] #打亂 時間複雜度:o(n^2)
list = [99,88,77,66,55,44,33,22,11] #最壞的情況 時間複雜度:o(n^2)
list = [11,22,33,44,55,66,77,88,99] #最優情況 時間複雜度:o(n)
bubble_sort(list)
2.選擇排序
def select_sort(alist):
#以游標初始處開始向後遍歷,結束一次遍歷為一趟,要走len(alist)-1趟
for j in range(len(alist)-1):
min_index = j #給乙個最小游標,放在未排序的第乙個元素上
#以初始游標值為標準,把游標初始值和其後面的值依次比較,
# 碰到更小的數將游標放入該值索引處,
# 全比較完後將最終游標指向的值和初始游標值位置調換
for i in range(j+1,len(alist)):
if alist[min_index] > alist[i]:
min_index = i
# 假如當前游標位置與初始游標位置不一樣,說明發生了變化
# 將初始游標值與當前游標值調換
if min_index != j:
alist[j],alist[min_index] = alist[min_index],alist[j]
print(alist)
list = [54,226,93,17,77,31,44.55,20]
select_sort(list)
3.插入排序
def insert_sort(alist):
# 從第二個開始,和前面所有元素比,比到第0個元素算一趟
for j in range(1,len(alist)):
flag = true
# 將當前元素和前面每乙個元素進行比較,比上乙個元素小,兩個就調換位置
for i in range(j,0,-1):
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
flag = false
if flag == true:
break
print(alist)
list = [54,26,93,17,77,31,44,55,20]
insert_sort(list)
python實現排序
def bubblesort list iflist none if len list 1 pass else for i in range len list for j in range len list 1 i if list j list j 1 list j list j 1 list j ...
排序演算法python實現
先列出一些演算法複雜度的識別符號號的意思,最常用的是o,表示演算法的上屆,如 2n2 o n2 而且有可能是漸進緊確的,意思是g n 乘上乙個常數係數是可以等於f n 的,就是所謂的a b。而o的區別就是非漸進緊確的,如2n o n2 o n2 確實可以作為2n的上屆,不過比較大,就是所謂的a其他符...
Python實現堆排序
usr bin env python coding utf 8 堆排序 class heap object 求給定下標i的父節點下標 defparent self,i if i 2 0 return i 2 1 else return i 2 求給定下標i的左孩子下標 defleft self,i ...