代碼學習過程中總結一下起泡排序法。
起泡排序法的基本思路:每次將相鄰的兩個數進行比較,將小的調到前頭。
若有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次兩兩比較。
我將起泡排序寫成函數
#include<stdio.h>
/*==========================================================
*函數名稱:main()
*功 能:主函數
*入口參數:
*出口參數:
*說 明:使用起泡法將給定的數組排序
*==========================================================*/
void main()
{
void qipao_paixu(int num[]);
int a[10]={655,23,56,2345,3897,36,478,31,90,208};
int i;
printf("原始序列:");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("起泡法排序\n");
qipao_paixu(a);
printf("排序後的序列:");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
/*==========================================================
*函數名稱:qipao_paixu()
*功 能:起泡排序
*入口參數:
*出口參數:
*說 明:對數組中的十個元素進行起泡排序
*==========================================================*/
void qipao_paixu(int num[])
{
int i,j,temp;
for(j=0;j<9;j++)//控制j趟比較
for(i=0;i<9-j;i++)//第j趟中,控制n-j次兩兩比較
{
if(num[i]>num[i+1])//判斷序列中兩兩相鄰數字大小
{
temp=num[i];//小數向前放,大數沉底
num[i]=num[i+1];
num[i+1]=temp;
}
}
}
經codeblock編譯運行
新手小白,還望多指正,以後常總結交流。