新手小白,代碼學習過程中總結一下起泡排序法。
起泡排序法的基本思路:每次將相鄰的兩個數進行比較,將小的調到前頭。
若有6個數:9,8,5,4,2,0
第一次先將最前面的兩個數8和9對調,第二次將第二個和第三個數(9和5對調)……如此一共進行五次,得到8,5,4,2,0,9的順序。
可以看到,大數已沉底,而小數上升。最小的數0已向上浮起一個位置,經過一次比較已經得到最大的數9。
然後進行第二趟比較,對余下的五個數進行新一次的比較。(8,5,4,2,0)進行新一輪的比較,以便使第二大的數沉底。按以上方法進行第二次比較。得到第二大的數8。
按此規律,可以推知,對六個數要比較五次,才能使六個數按大小順序排列。
第一趟要比較5次,第二趟比較4次……第五趟比較1次。
規律:如果有n個數,則要進行n-1次比較。在第一趟比較中藥進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。
我將起泡排序寫成函數
1 #include<stdio.h> 2 /*========================================================== 3 *函數名稱:main() 4 *功 能:主函數 5 *入口參數: 6 *出口參數: 7 *說 明:使用起泡法將給定的數組排序 8 *==========================================================*/ 9 void main() 10 { 11 void qipao_paixu(int num[]); 12 int a[10]={655,23,56,2345,3897,36,478,31,90,208}; 13 int i; 14 printf("原始序列:"); 15 for(i=0;i<10;i++) 16 printf("%5d",a[i]); 17 printf("\n"); 18 printf("起泡法排序\n"); 19 qipao_paixu(a); 20 printf("排序後的序列:"); 21 for(i=0;i<10;i++) 22 printf("%5d",a[i]); 23 24 } 25 /*========================================================== 26 *函數名稱:qipao_paixu() 27 *功 能:起泡排序 28 *入口參數: 29 *出口參數: 30 *說 明:對數組中的十個元素進行起泡排序 31 *==========================================================*/ 32 void qipao_paixu(int num[]) 33 { 34 int i,j,temp; 35 for(j=0;j<9;j++)//控制j趟比較 36 for(i=0;i<9-j;i++)//第j趟中,控制n-j次兩兩比較 37 { 38 if(num[i]>num[i+1])//判斷序列中兩兩相鄰數字大小 39 { 40 temp=num[i];//小數向前放,大數沉底 41 num[i]=num[i+1]; 42 num[i+1]=temp; 43 } 44 45 } 46 47 }
經codeblock編譯運行
新手小白,還望多指正,以後常總結交流。
Bruce李
2016.6.6