排序演算法之python氣泡排序

2021-08-25 14:19:50 字數 2085 閱讀 6350

氣泡排序是一種交換排序

比較相鄰的連個關鍵字,把大的往後放,小的就向前移動,即冒泡

def bubblesort(input_list):

#如果待排序列為空,則直接返回空列表

if len(input_list) == 0:

return

sorted_list = input_list

for i in range(len(input_list)-1):

for j in range(len(input_list)-1):

#發現後面元素小於前面元素,則交換該兩個元素

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數c和記錄移動次數m均達到最小值:cmin = n - 1, mmin = 0。所以,氣泡排序最好時間複雜度為o(n)。

但是上述**,不能掃瞄一趟就完成排序,它會進行全掃瞄。所以乙個改進的方法就是,當冒泡中途發現已經為正序了,便無需繼續比對下去。改進方法一會兒介紹。

若初始檔案是反序的,需要進行 n -1 趟排序。每趟排序要進行 n - i 次關鍵字的比較(1 ≤ i ≤ n - 1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:

cmax = n(n-1)/2 = o(n^2)

mmax = 3n(n-1)/2 = o(n^2)

氣泡排序的最壞時間複雜度為o(n^2)。

因此,氣泡排序的平均時間複雜度為o(n^2)。

總結起來,其實就是一句話:當資料越接近正序時,氣泡排序效能越好。

在後面元素小於前面元素才發生交換,故相等時是不交換的,所以氣泡排序是一種穩定排序演算法

對氣泡排序常見的改進方法是加入flag變數,用於記錄某一趟排序過程中是否有資料交換。

如果進行某一趟排序時並沒有進行資料交換,則說明所有資料已經有序,可立即結束排序,避免不必要的比較過程。

**:def bubblesort(input_list):

#如果待排序列為空,則直接返回空列表

if len(input_list) == 0:

return

sorted_list = input_list

for i in range(len(input_list)-1):

#加入標誌變數,初始值設為false

flag = false

for j in range(len(input_list)-1):

#發現後面元素小於前面元素,則交換該兩個元素

if sorted_list[j+1]結果:少兩趟,比之前優化

input_list:

[50, 123, 543, 187, 49, 30, 0, 2, 11, 100]

1th:

[50, 123, 187, 49, 30, 0, 2, 11, 100, 543]

2th:

[50, 123, 49, 30, 0, 2, 11, 100, 187, 543]

3th:

[50, 49, 30, 0, 2, 11, 100, 123, 187, 543]

4th:

[49, 30, 0, 2, 11, 50, 100, 123, 187, 543]

5th:

[30, 0, 2, 11, 49, 50, 100, 123, 187, 543]

6th:

[0, 2, 11, 30, 49, 50, 100, 123, 187, 543]

7th:

[0, 2, 11, 30, 49, 50, 100, 123, 187, 543]

sorted_list:

[0, 2, 11, 30, 49, 50, 100, 123, 187, 543]

Python排序演算法之氣泡排序

顧名思義,氣泡排序直觀的意思是氣泡越大冒的越快 對應到我們的列表中就是數字最大的先選出來,然後依次進行。例如 mylist 1,4,5,0,6 比較方式為 相鄰的兩個數字先進行比較,也就是mylist 0 和mylist 1 發現不是 的關係,就繼續比較mylist 1 和mylist 2 依次進行...

排序演算法(python) 之 氣泡排序

比較相鄰的兩個元素,若前乙個大於後乙個則交換 對每一對相鄰元素進行比較,直至最後一對元素。重複上述步驟,知道排序完成。這為向上冒泡。向下冒泡同理。1 向上冒泡 m input split n int m i for i in range len m 輸入的陣列 for i in range len ...

Python排序演算法之氣泡排序

比較列表相鄰的兩個值,如果前面比後面大,則交換這兩個值。每一趟氣泡排序,無序區減少乙個數,有序區增加乙個數。最壞情況 o n 2n 2 n2 平均情況 o n 2n 2 n2 最好情況 o n o 1 穩定 簡單 趟數 n 1 無序區範圍 0 n 趟數 1 在一趟氣泡排序完成後,如果沒有發生任何的交...