python實現排序

2021-09-03 07:07:23 字數 1892 閱讀 6992

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 ...