使用 GitHub Actions 部署 Hexo 部落格
阿新 • • 發佈:2021-12-05
一、什麼是氣泡排序法:
對於一組資料:3, 6 , 2 ,9 , 4, 7, 1, 0, 8, 5, 10,要將這些資料按照從小到大的順序進行排序,可以使用氣泡排序法。
首先:將第一個數字和第二個數字進行排序,如果第一個數字大於第二個數字,交換位置。
其次:將第二個數字和第三個數字進行排序,如果二大於三,則交換位置。
最後,將倒數第二個和倒數第一個進行排序,如果倒數第二個大於倒數第一個,則交換位置。
這樣操作之後,我就會把最大的數字排到最後面。
之後:我再從頭開始,這回把第二大的排到倒數第二個位置上......最後我只需要找到倒數第二小的數字,相應的也就確定了最小的數字,整個數列排序完畢。
通過上面的例子我們可以發現:排最大的進行一輪,排第二大進行一輪,最後排第二小的進行一輪,總共進行了10輪。
每一輪中都是不同的位置上面進行比較,因此可以分析出來,外層迴圈的是輪數,內層迴圈的是位置(下標)
二、通過一個程式來理解:
//氣泡排序的案例 #include <stdio.h> int main(void) { int names[11]={3,6,2,9,4,7,1,0,8,5,10}; int dates[11]; for (int i=0;i<11;i++) { dates[i]=names[i]; } int out_i; int in_i; for (out_i=0;out_i<10;out_i++)//out_i是輪數 { for (in_i=0;in_i<10-out_i;in_i++) //in_i表示的是位置,in_i最後所抵達的位置和輪數有關,例:第一輪比較出最大的了, //第二輪就不用和最後位置進行比較,因此相應的位置也減少一位,即減去輪數。每次都從第一個開始,所以初始值是0 ,當 //out_i=0時,in_i+1最大到最後一個,in_i也就是隻能到倒數第二個,也就是位置9,此時是<10-0。 { if(dates[in_i]>dates[in_i+1]) { int agent; agent=dates[in_i]; dates[in_i]=dates[in_i+1]; dates[in_i+1]=agent; } } } printf("print the changed array:\n"); for (int n=0;n<11;n++) { printf("dates[%d]=%d\n",n,dates[n]); } printf("print the original array:\n"); for(int n=0;n<11;n++) { printf("names[%d]=%d\n",n,names[n]); } return 0; }
列印結果如下:
print the changed array:
dates[0]=0
dates[1]=1
dates[2]=2
dates[3]=3
dates[4]=4
dates[5]=5
dates[6]=6
dates[7]=7
dates[8]=8
dates[9]=9
dates[10]=10
print the original array:
names[0]=3
names[1]=6
names[2]=2
names[3]=9
names[4]=4
names[5]=7
names[6]=1
names[7]=0
names[8]=8
names[9]=5
names[10]=10