初學排序之氣泡排序(學習筆記)

2021-10-01 15:35:31 字數 1522 閱讀 5997

我是一名初學程式設計的軟體工程大一新生,希望通過寫部落格的方式來記錄我的日常所學,方便隨時檢視複習,以及鍛鍊自己寫文件的能力。

假設給出5個數形成數列 3,2,1,5,4

現要求按從小到大的順序將數列重新排列,我們可以按以下思路來實現

第一次交換結果| 2 | 1 | 3 | 4 | 5 |

3先和2比較,發現3>2,將3和2的位置互換 即 | 2 | 3 | 1 | 5 | 4 |

接著3和1比較,發現3>1,則將3和1的位置互換 得到 | 2 | 1 | 3 | 5 | 4 |

3和5比較,發現3<5,則不做任何操作 即| 2 | 1 | 3 | 5 | 4 |

5和4比較,發現5>4,則將5與4的位置呼喚 即| 2 | 1 | 3 | 4 | 5 |

這樣,我們得到了最大數 5

第二次交換結果

2先和1比較,發現2>1,交換位置,得到 | 1 | 2 | 3 | 4 | 5 |

2再和3比較,發現2<3,不做任何操作

3和4比較,不做任何操作

4和5比較,不做任何操作

這樣,我們得到了除5之外的最大數4

我們發現,每一趟交換都能得到乙個最大值,因此對於5個數來說,只需要4趟交換就可得到我們想要的結果。我們還發現,每做一趟交換,下一趟需要作比較的數的個數就會少乙個

#include

intmain

(void);

for(

int i =

0; i <5-

1; i++)}

}for

(int i =

0; i <

5; i++

)return0;

}

你一定發現了,這段**存在一點小問題,為什麼這麼說呢?

原來在內層for迴圈中,如果i為0時(第一趟排序),for的入口條件變為 j < 5,這就造成當j = 4時,a[j + 1]造成了越界訪問,所以我們將內層for迴圈的入口條件稍稍修改一下: j < 5 - i - 1

同時我們還可以對這段**進行優化

怎麼做呢?我們可以通過判斷是否仍進行交換來決定是否跳出迴圈,即判斷內層for迴圈中是否進行了交換操作。思路有了,怎樣通過**實現呢?我們可以宣告乙個布林變數。

優化後的**如下

#include

intmain

(void);

for(

int i =

0; i <5-

1; i++)}

ifbreak;}

for(

int i =

0; i <

5; i++

)return0;

}

經典排序之氣泡排序之Python 初學

氣泡排序key 避免與選擇排序混淆,氣泡排序特有的是,兩兩進行比較。list 4,3,1,2,5 n len list for i in range 0,n for j in range 0,n i 1 print 當前j d j print j要迴圈的次數為 d,這是第 d次迴圈 n i 1,j ...

排序學習之 氣泡排序

原理 對一組資料,比較相鄰資料的大小,將值小資料在前面,值大的資料放在後面。以下都是公升序排列,即從小到大排列 舉例說明 arr array 6,3,8,2,9,1 arr 有6個資料,按照兩兩比較大小如下,注意 比較輪數 和 每輪比較次數 第一輪排序 第一次比較 6和3比較 結果 3 6 8 2 ...

C 初學演算法排序 氣泡排序,選擇排序

最近想學習一下演算法的處理,從網上搜尋了一下例子進行了總結說明 初學 開始不會接觸太難的演算法 先從最簡單的演算法開始學起 這次主要講的就是 冒泡演算法 和選擇演算法。直接貼 氣泡排序 演算法處理 針對需要處理的資料資訊進行處理 返回陣列集合資訊 public static int bubbling...