1. 程式人生 > >氣泡排序演算法C語言實現

氣泡排序演算法C語言實現

第一部分   排序方法介紹

常用的排序方法:氣泡排序,選擇排序,插入排序及希爾排序等。

       氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,則交換;重複進行,知道沒有需要交換為止。

以升序排序為例:        1. 比較相鄰數字的大小,若第一個數比第二個數大,則相互交換;        2. 對每一對相鄰的數作相同的工作,那麼最後的數應該是最大的數;        3. 針對所有數(除了最後一個)重複上述步驟,直到沒有任何一對數字需要比較為止。            需要注意的是,第3條中所謂的“最後一個”是指前幾步中已經處理過的最大的數,而不是整個數列的最後一個數。        例如,將下列數列用氣泡排序法從小到大重新排列;                49  38  65  97  76  13  27  49

         每次排序後數列的變化如下:          第一趟排序:38 49 65 76 13 27 49 97          第二趟排序:38 49 65 13 27 49 76 97          第三趟排序:38 49 13 27 49 65 76 97          第四趟排序:38 13 27 49 49 65 76 97

                     :                      :       經過一系列過程,最終數列次序為:13  27 3 8  49 4 9  65  76  97       通過對以上排序的分析,我們可以簡要畫出氣泡排序的流程圖:

        ……………………void

      觀察流程圖,我們不難發現通過一個簡單的迴圈結構,即可實現對一組數進行排序。

部分程式如下: #include <stdio.h>  int main () {     int i, j,temp;     int array[n];      for (i = 0;i <8; i++)     {        scanf ("%d",&array[i]);    //通過陣列和迴圈輸需要排序的數列     } 

    printf ("Before ordering,the rank is : ");      for (i = 0;i < 8 ; i++)     {        printf ("%d ",array[i]);     }     printf ("\n");                //顯示排序之前的陣列

     for (j = 0;j < n-1; j++)     {        for(i = 0;i < n-j-1; i++)           //兩次迴圈實現排序           {               if (array[i] > array[i+1])    //相鄰兩數字比較              {                   temp = array[i];                   array[i] = array[i+1];                   array[i+1] = temp;       //中間變數temp實現相鄰元素的交換               }                                            }     }       printf ("After ordering,the rank is :");      for(i = 0;i < n ; i++)     {        printf ("%d ",array[i]);            //顯示排序後的陣列     }     printf ("\n");        return 0; }