氣泡排序的2種寫法
阿新 • • 發佈:2019-01-22
假如有幾個數字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],實現程式碼如下:
- for(int i =0;i < score.length - 1;i++)
- {
- for(int j = 0;j < score.length - 1-i;j++)// j開始等於0,
- {
- if(score[j] < score[j+1])
- {
- int temp = score[j];
- score[j] = score[j+1];
- score[j+1] = temp;
- }
- }
- }
第二種思路,用88 和 75 比較,在和69 比較 在和 67 比較,發現88是最大的,吧他排到第一位(index=0的位置),然後i=1,也就是第二輪,就不用看下標為0的88了因為他是老大,然後接著比較。;
- for(int i =0;i < score.length - 1;i++)
- {
- for(int j = (score.length - 2);j >= i;j--)
- {
- if(score[j] < score[j+1
- {
- int temp = score[j];
- score[j] = score[j+1];
- score[j+1] = temp;
- }
- }
- }
說明下j為啥=
(score.length - 2)
因為length=4,我最多能讓下標2和下標3的數字比較(j+1最大等於3),也就是4-2=2 j最大=2,2和2+1比較 然後1和2比較,然後 0和1 比較。