Python的氣泡排序 選擇排序和插入排序

2021-10-03 18:43:05 字數 2821 閱讀 5835

穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如果乙個排序演算法是穩定的,當有兩個相等鍵值的紀錄r和s,且在原本的列表中r出現在s之前,在排序過的列表中r也將會是在s之前。

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

2、氣泡排序的實現

【方法一】

def bubble_sort(alist):

"""氣泡排序"""

n = len(alist)

for j in range(0, n-1):

#第幾次走for i #[0,1,2,3...n-2]

for i in range(0, n-1-j):

#從頭走到尾,解釋如下

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

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

if __name__ == '__main__':

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

print(li)

bubble_sort(li)

print(li)

# i 0~n-2 range(0, n-1) j=0

# i 0~n-3 range(0, n-1-1) j=1

# i 0~n-4 range(0, n-1-2) j=2

# i 0~n-5 range(0, n-1-3) j=3

# i 0~n-6 range(0, n-1-4) j=4

# 當j=n i range (0, n-1-j)

輸出:[54, 26, 93, 17, 77, 31, 44, 55, 20]

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

【方法二】

def bubble_sort(alist):

"""氣泡排序法2"""

n = len(alist)

for j in range(n-1, 0, -1): #[n-1,n-2,n-3...1]

for i in range(0, j):

#從頭走到尾

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

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

if __name__ == '__main__':

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

print(li)

bubble_sort(li)

print(li)

輸出:[54, 26, 93, 17, 77, 31, 44, 55, 20]

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

3、氣泡排序的時間複雜度

1、選擇排序的原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

2、選擇排序的實現

def select_sort(alist):

"""選擇排序法"""

n= len(alist)

for j in range(n-1): #j:0~n-2;j=[0,1,2,3...n-2]

min_index = j

for i in range(j+1, n): #j和j+1比較

if alist[min_index] > alist[i]:

min_index = i

alist[j], alist[min_index] = alist[min_index], alist[j]

if __name__ == '__main__':

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

print(li)

select_sort(li)

print(li)

輸出:[54, 26, 93, 17, 77, 31, 44, 55, 20]

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

3、選擇排序的時間複雜度

1、插入排序(insertion sort)

它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

2、插入排序的實現

def insert_sort(alist):

"""插入排序法"""

n= len(alist)

for j in range(1,n):

i = j

while i > 0:

if alist[i] < alist[i-1]:

alist[i], alist[i-1] = alist[i-1], alist[i]

i -= 1 #alist[i]比前面的數小

else:

break

if __name__ == '__main__':

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

print(li)

insert_sort(li)

print(li)

輸出:[54, 26, 93, 17, 77, 31, 44, 55, 20]

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

3、選擇排序的時間複雜度

python氣泡排序 選擇排序

氣泡排序 1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個的位置。2 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。完成一次完整的比較和交換位置時,最後的元素應該會是最大的數。3 針對所有的元素重複以上的步驟,除了最後乙個。4 持續每次對越來越少的元素重複上面的步驟,直到沒有任...

Python 氣泡排序 選擇排序

依次輸入n個數,進行氣泡排序 氣泡排序法,即兩個相鄰的進行比較,比較之後換位置 def bubblesort arr n len arr for i in range n for j in range 0 n i 1 if arr j arr j 1 arr j arr j 1 arr j 1 ar...

python棧 氣泡排序 選擇排序

有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,它的特徵在於只能允許在容器的一端進入加入資料和輸出資料的運算。沒有了位置概念,保證任何時候可以訪問 刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問順序。棧可以用順序表實現,也可以用鍊錶實現。stack 建立 個新的空棧 p...