1. 程式人生 > >氣泡排序的2種寫法

氣泡排序的2種寫法

假如有幾個數字int score[] = {67, 69, 75, 88};  按照從大到小排序。

有2種思路,第一種,score[j] 和 score[j+1] 比較 如果 前者比後者小,把前者和後者調換順序,兩兩調換後一輪下來 最小的會被排到最後去。每一輪j都從0開始,當i輪排序,就有最後面的i個數字因為他是最小的,所以後面的每輪都不用理他了,也就是 score.length-1-i  往後的數不用管了,如上,第一輪有4個數字 i為0 ,那麼score.length-1-i  為3,也就是下標是3以後的可以不用管,3往後沒有數字,所以第一輪所有的數字都要參加比較,第二輪I=1  score.length-1-i  為2 也就是說 下標2後面的 下標為3的數字不用比了,因為兩兩比較厚,67會到 score[3],實現程式碼如下:

  1. for(int i =0;i < score.length - 1;i++)
  2. {
  3. for(int j = 0;j < score.length - 1-i;j++)// j開始等於0,
  4. {
  5. if(score[j] < score[j+1])
  6. {
  7. int temp = score[j];
  8. score[j] = score[j+1];
  9. score[j+1] = temp;
  10. }
  11. }
  12. }

第二種思路,用88 和 75 比較,在和69 比較 在和 67 比較,發現88是最大的,吧他排到第一位(index=0的位置),然後i=1,也就是第二輪,就不用看下標為0的88了因為他是老大,然後接著比較。;
  1. for(int i =0;i < score.length - 1;i++)
  2. {
  3. for(int j = (score.length - 2);j >= i;j--)
  4. {
  5. if(score[j] < score[j+1
    ])
  6. {
  7. int temp = score[j];
  8. score[j] = score[j+1];
  9. score[j+1] = temp;
  10. }
  11. }
  12. }

說明下j為啥=
(score.length - 2)

因為length=4,我最多能讓下標2和下標3的數字比較(j+1最大等於3),也就是4-2=2  j最大=2,2和2+1比較  然後1和2比較,然後 0和1 比較。