[C++] 氣泡排序法(Bubble sort)

文章推薦指數: 80 %
投票人數:10人

氣泡排序的意思,wiki 裡面是這麼說明: 又稱為泡沫排序,是一種簡單的排序演算法。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWrite[C++]氣泡排序法(Bubblesort)簡單記錄一下自己的理解氣泡排序的意思,wiki裡面是這麼說明:又稱為泡沫排序,是一種簡單的排序演算法。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

[註1]它的運作原理是這樣(以由小排到大為例子):1.每次都拿相鄰的兩個數字進行比較,如果第一個數字比第二個數字大,就把兩個數字交換。

假設有個陣列裡面有-3,6,5,-1,0,9,3首先他會先比較前面的-3跟6:因為-3沒有大於6,所以並不會交換。

接下來則會繼續比較6跟5:因為6有比5大,所以會進行交換,就會變成這樣:2.依序兩兩相比,當最後的兩個數字比較過後,可以確定最後的數字一定是最大的。

比較的過程會像是這樣:所以最後的數字9會是這個陣列裡面最大的。

3.再從第一個數字開始兩兩相比,但這次處理範圍就不包括剛剛已經確定的最大的數字(9)了。

4.依照這樣的作法,到最後處理範圍只剩第一個數字跟第二個數字,比完後排序就結束了。

結果會像是這樣:簡單範例:(以C++為例)intA[]={-3,6,5,-1,0,9,3};inti,j,tmp;intn=sizeof(A)/sizeof(int);for(i=n-1;i>0;i--){for(j=0;j<=i-1;j++){if(A[j]>A[j+1]){tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;}}}首先,假設我有一個陣列裡面放著-3,6,5,-1,0,9,3n是這個陣列的長度,長度是7。

我們從小區塊開始看:if(A[j]>A[j+1]){tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;}這裡面在做的事情,是把陣列裡的兩個數字進行比較,當第一個數字大於第二個數字,就會進行交換。

接著設定j迴圈的範圍“i-1”,這個會決定要處理的陣列範圍:for(j=0;j<=i-1;j++){if(A[j]>A[j+1]){tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;}}根據上面運作原理的說明,我們知道每比較完一輪,陣列處理的範圍就會減少一個數字,所以我們可以透過改變i的值決定j迴圈的範圍,同時也決定了陣列的處理範圍。

因此我們可以加上i迴圈決定i的值:for(i=n-1;i>0;i—){for(j=0;j<=i-1;j++){if(A[j]>A[j+1]){tmp=A[j];A[j]=A[j+1];A[j+1]=tmp;}}}i=n-1,代表第一次j迴圈會處理的陣列範圍是n-1每跑完一輪就減1,直到i不大於0,排序就結束了。

氣泡排序的介紹大致上是這樣,以上是對於氣泡排序的理解簡單做個紀錄,若有任何想法或意見非常歡迎提出來~[註1]Wiki(氣泡排序):https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8FMorefromMartinFollowRecordmylifeandwork.Lovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstartedMartin13FollowersRecordmylifeandwork.FollowMorefromMediumBipsmediumWhileLoopinCwithExampleCanYükselBrieflyTheImportanceOfInterfacesYEH-HSIN-LEEStaticlibrariesinC배우는자(LearnerOfLife)ProgrammingDiaries — Day1 — StartingC#HelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?