LV. 25
GP 147

RE:【問題】氣泡排序法的困擾,挺急的

樓主 老公 aabbabc000
GP2 BP-
我打很長串  因為我從內部開始慢慢拆  逐句解釋  如果懶的看  可以直接看結論

其實迴圈剛入門時   最好的辦法就是照著他的方式自己動手寫一遍(像某樓大大那樣)
這是最快瞭解氣泡排序原理的辦法(迴圈類都是這樣)

然後看程式不用太急著看說有幾層迴圈  迴圈轉幾次
那數字看到你一定頭暈馬上放空

要先看最裡面的程式碼   知道他在最裡面做什麼  再去慢慢往外拆解他的運作
我個人會自己翻成中文  比較容易搞懂

要看運作方式  要從最裡面的 if 開始看!!

---------------------------------------------最裡面的  if 判斷式
if(data[ j ]>data[j+1])
                  {
                    t=data[j];            
                    data[j]=data[j+1];
                    data[j+1]=t;
                  }
大概就是...
       如果arr[ j ]比arr[ j+1 ]大
           { 把arr[ j ] 丟進 t
             把arr[ j+1 ]的值丟進 arr[ j ]
             把 t 的值丟進arr[ j + 1 ]
            }
---------------------------------------------

j 來 j+1 去有沒很煩...!!   所以在腦袋想的時候  用假設!!!
腦袋裡先假設arr[ j ] 是6  arr[ j+1 ]是5  然後再套進判斷式看他會怎麼做  這樣就清楚了

if 判斷式簡化後的意思  就是兩個值  相比較後  較小的值往前丟  較大的值往後丟

然後內部迴圈的意思就出來了
---------------------------------------------內部迴圈 ( j )
for( j=0 ; j<=i ; j++)   
            {    }

從0開始 ' 把值對調到 i 次為止 (因為是 j++)
每一次if 判斷都會把較大的值往後丟  所以 j 迴圈跑完後  該輪最大的值會被丟到最後
這邊也是你一開始提問的問題點  
因為程式主要是把較大的值往後挪  而不是較小的值往前挪   (兩個有差喔!!)
所以你看 j 跑到 3 的時候  22還是在arr[0]裡

內部 j 迴圈的結論  只將最大的值  在執行完成後丟到最後一位(而前幾位則沒比分大小排序喔)

再然後!  因為最大的數字已經被丟到最右邊了  氣泡排序法的第一圈作用已經出來了
所以自然而然  外部迴圈的意思也不難猜

---------------------------------------------外部迴圈 ( i )
for(i=3;i>=0;i--)
        {  }

剛剛第一次 j 迴圈  已經把最大的數字丟到最後一位
不再需要跑滿4次了  所以設定會用 i--  最大的值已經在右邊了  接下來只需要跑三次就可以了
(每跑一次 j 迴圈 就會把最大值推到最後面 所以 j 迴圈條件是定 j <= i  j迴圈跑的次數可以越跑越少次)

外部 i 迴圈結論  讓 j 迴圈持續轉動  直到陣列內每個一值都有比過大小確定排序成功為止

再總結
if  是判斷值是否該交換順序
j 迴圈  只負則把該輪最大值丟到最後一位(其他不管)
i 迴圈  負則把 j 迴圈沒判斷到的  繼續完成判斷

氣泡排序法的重點就是  持續的把較大的值往後挪  而挪到了最後  最小的值就會跑到最前面了這樣

其實最好的辦法還是把每個迴圈執行的動作都print出來  仔細看看他的值是怎麼動作的

另外  看程式  不要從上往下看  要從內往外看  才容易看得懂喔

最後  這是由小到大排嘛
說說看吧  由大到小排序該從哪改?
2
-
未登入的勇者,要加入討論嗎?
板務人員:歡迎申請板主

精華區有 10 筆文章
目前無人維護,申請組長


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】