交換排序 氣泡排序

2022-08-20 02:30:19 字數 1319 閱讀 1227

氣泡排序

這個系列是回顧之前所學,是用python商量著完成的。

路過的大佬就當看個樂,實現演算法的方式不一,也有討巧的做法。

我只講講我的思路,希望大家瀏覽的時候能多多提建議,共同學習共同進步。

氣泡排序演算法的原理如下:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

先舉個例子:

[5, 4, 3, 2, 1] 用氣泡排序實現

第一次排序:[4, 3, 2, 1, 5]

第二次排序:[3, 2, 1, 4, 5]

第二次排序:[2, 1, 3, 4, 5]

第四次排序:[1, 2, 3, 4, 5]

剛開始指標指向 『5』,依次與後面的四個元素作比較,小就交換,大就不動了,然後將指標向前移一位指向第二個元素繼續前面的步驟,當執行到第四次,就不用排序了。

怎麼說?

這時的第乙個數不用想,肯定是最小的,那就是說一共有五個元素,排序次數為4次,在此基礎上抽象一點就是:有n個元素,排序次數就是n-1次

根據上面的思路,我們用python**結合迭代嘗試實現:

1

defbubble_sort(list):

2for i in range(0, len(list)-1):

3 flag =0

4for j in range(0, len(list)-1-i):

5if list[j] > list[j+1]:

6 list[j+1], list[j] = list[j], list[j+1]

7 flag += 1

8if flag ==0:

9return

list

1011

return list

第乙個迴圈是執行排序次數是多少,應該為n-1次

第二個迴圈是陣列中內部元素之間的比較,每次排好序列的元素就不需要再去動它了,所以每次排序完成之後只需要在剩下的元素中排序就行了

這裡做了一點點優化,當傳入的陣列已經是降序序列時,不會執行第二個迴圈的內容,則flag為0,直接輸出結果,將flag放入迴圈內部是每次呼叫都會重新初始化flag,不會出現累加的情況。

那麼下個快速排序再見。

交換排序 氣泡排序

交換排序 兩兩比較待排序記錄的關鍵碼,若是逆序,則交換,直到無逆序。其中最簡單的交換排序是 氣泡排序。氣泡排序 bubble sort,也叫起泡排序 不斷地比較相鄰的記錄,若是不滿足排序要求,則交換。交換時,可從前向後,也可從後向前。看乙個從前向後的排序過程 原序列 12 3 45 33 6 下標 ...

氣泡排序 交換排序

最壞情況下,直接插入排序時間複雜度為 n 最小時間代價為 n 平均時間代價為 n 附加儲存空間 乙個儲存單位 穩定性 穩定 原址性 是 緊緻性 乙個比較,三個賦值操作 特點 對於基本有序,或偶爾有幾個在有序位置附近時,效率高,只有直接插入排序和它達到一樣的效果 整體效果不如直接插入排序,因為,直接插...

交換排序 氣泡排序

1.原理 從小到大排序 存在10個不同大小的氣泡,由底至上地把較少的氣泡逐步地向上公升,這樣經過遍歷一次後,最小的氣泡就會被上公升到頂 下標為0 然後再從底至上地這樣公升,迴圈直至十個氣泡大小有序。在 氣泡排序中,最重要的思想是兩兩比較,將兩者較少的公升上去 氣泡排序最壞情況的時間複雜度是o n 2...