冒泡排序
冒泡排序 ( Bubble Sort ),是排序演算法中最簡單的一種
一般都是我們新瞭解一門語言時拿來練手使用
今天也不例外,雖然用 C# 寫過無數次的冒泡排序,但是畢竟換了一門語言,所以有必要再來實現一次
原理
1.冒泡
既然決定寫文章記錄,那麼就要好好的寫
我們說冒泡排序簡單,那麼為什麼簡單呢?就是因為容易理解
冒泡 Bubble,如其意,就像氣泡一樣,他會慢慢的從海底浮出水面
那麼這一層一層的浮現也是我們冒泡排序的實現方式
2.原理
假設我們有如此數組 :
7 2 9 22 16 93 202 0 33 29 84
一共是 11 個數字
我們先給數字加上下標
7[0] 2[1] 9[2] 22[3] 16[4] 93[5] 202[6] 0[7] 33[8] 29[9] 84[10]
這裡我們先假設要對數組進行從小到大的排序
那麼首先:
那如何保證最小的數字在第一位呢?
其實就是誰小誰來的道理
3.思路
1.我們拿第一位 [0] 也就是 7 依次向後方數字做比較,直到出現比 7 小的數字後,將該數字
與 7 交換位置
如:第二位 [1] 也就是 2 就比 7 小,那麼 [0] 位置由 2 來佔據, 7 暫居第二位 [1]
2.此時數組 [0] 為 2 ,再按照 1. 中方式依次向後比較
3.當 [7] 0 時, 再次滿足交換條件,2 與 0 交換位置
4.最終確認 0 即最小值 ,那麼第一位置確認,就是 0
5.下一步確認第二位 [1] 值 ... 重複上述步驟
代碼
// 冒泡func Bubble_Sort(slice []int/* 帶排序的切片 */, order bool/* true : 正序; false : 倒序; */) { /* 1. 本迴圈代表 依次與其後所有數作比較的索引 2. 由於最後一個數不用比較,所以 len(slice) - 1 */ for i := 0; i < len(slice) - 1; i++ { // 本迴圈代表 外層將要與哪一位作比較 for k := i +1; k < len(slice); k++ { if (slice[i] > slice[k] && order) /* 從大到小 */ || (slice[i] <= slice[k] && !order ) /* 從小到大 */ { slice[i], slice[k] = slice[k], slice[i] } } }}
結果
排序結果