氣泡排序演算法及Ruby版的簡單實現

2022-10-04 21:51:42 字數 1080 閱讀 8804

演算法原理:

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

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步vfdivkenq驟,除了最後乙個。

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

實現假設有這樣乙個陣列: [4, 1, 3, 2]

氣泡排序為從第乙個數開始,吧這個數與後面的數比較,如果這個數比後面的大,就交換他們的位置。

比如,第一次比較4和1,發現4比1大,交換 -> [1, 4, 3, 2]

第二次比較4和3,發現還是4大,交換 -> [1, 3, 4, 2]

第三次比較4和2,仍然4比2大,交換 -> [1, 3, 2, 4]

這樣在進行了第一輪迴圈之後,最大的數4就被頂到陣列的最後去了,就像泡泡一樣從水底冒起來一樣。那麼,要完成整個陣列的排序,只需要把最大的數頂到最後,然後第二輪再把第二大程式設計客棧的數頂到倒數第程式設計客棧二的位置,再來第三輪。。。。一直迴圈下去。

回到剛才的陣列,第二輪比較開始,現在的狀態是[1, 3, 2, 4]

比較1和3,1小於3,跳過 -> [1, 3, 2, 4]

比較3和2,3大於2,交換 -> [vfdivkenq1, 2, 3, 4]

這一輪到這裡就可以停止了,因為第一輪已經把最大的4頂到了最後,所以第二輪只要確保第二大的數頂到倒數第二就行。

然後繼續第三輪(雖然目前看起來已經排序完成了)

比較1和2,不用交換[1, 2, 3, 4]

這裡比較就全部完成。原理非常簡單。

def bubble_sort(list)

list.each_index do |index|

(list.length - index - 1).times do |e|

if list[e] > liwww.cppcns.comst[e + 1]

list[e], list[e + 1] = list[e + 1], list[e]

endend

endend

本文標題: 氣泡排序演算法及ruby版的簡單實現

本文位址:

排序演算法之氣泡排序及簡單優化

氣泡排序是一種簡單的排序演算法,其基本思想就是兩兩相鄰的進行比較以陣列a 為例 第一步就是3和1進行比較3比1 大所以兩者交換 接下來就是繼續把3和4比,4比3大不換 繼續下去我們發現4比5小則交換 繼續比較5和2,5比2大則5和2交換 第一輪結束,我們可以繼續第二輪,在上一輪中我們已經把陣列中最大...

簡單的氣泡排序演算法

description 實現乙個簡單的氣泡排序演算法 所謂的氣泡排序就是指集合中的元素兩兩比較,如果前面的比後面的大就交換彼此的位置,交換後繼續比較 auther eleven create 2020 04 04 20 24 public class bubblesort bubblesort bu...

氣泡排序演算法(優化版)

include include include 排序用到的結構和函式 define maxsize 20 typedef struct sqlist 交換l中陣列r的下標為i和j的值 void swap sqlist l,int i,int j 氣泡排序 優化版 void bubblesort sq...