氣泡排序
這個系列是回顧之前所學,是用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**結合迭代嘗試實現:
1defbubble_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...