新手小白,代碼學習過程中總結一下起泡排序法。
起泡排序法的基本思路:每次將相鄰的兩個數進行比較,將小的調到前頭。
若有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