1.實例代碼
<span style="font-size:24px;">#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void main()
{
int num,temp,h,arr[20];
srand (time(0));
for (</span><span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;">num</span><span style="font-size:24px;">=0;num<20;num++){
arr[num]=rand();//產生20個隨機數printf("%d ",arr[num]);
}
for (num=0;num<19;num++)
for (h=0;h<19-num;h++){
if (arr[h]>arr[h+1]){
temp=arr[h];
arr[h]=arr[h+1];
arr[h+1]=temp;
}
}
for (num=0;num<20;num++){
printf ("%d ",arr[num]);//將排序後的20個數打印出來
}
}</span>
2.冒泡排序原理
冒泡排序算法的運作如下:(這是百度百科上面的解釋)
-
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
-
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
-
針對所有的元素重複以上的步驟,除了最後一個。
-
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
我的解釋:根據我上面的實例代碼,arr[20]中共有20個無序的隨機數,冒泡排序就是通過19次循環,第1次循環比較arr[0]到arr[19]這20個數,找到最大的數放在arr[19]中(不再比較),第2次循環,比較arr[0]到arr[18]這19個數,找到最大的數放在arr[18]中(不再比較),第3次循環,比較arr[0]到arr[17]這18個數,找到最大的數放在arr[17]中(不再比較)................,第19次循環,比較arr[0]到arr[1]這2個數,找到最大的數放在arr[1]中,小的那個數放在arr[0]中,這樣冒泡排序就結束了!