程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> #C語言#起泡排序法的總結,

#C語言#起泡排序法的總結,

編輯:關於C語言

#C語言#起泡排序法的總結,


新手小白,代碼學習過程中總結一下起泡排序法。

起泡排序法的基本思路:每次將相鄰的兩個數進行比較,將小的調到前頭。
若有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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved