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

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


總結:

1、氣泡排序有二種順序來排序的。有升序或者降序來進行氣泡排序(注意萬一在面試中,面試官有問到氣泡排序,要問清楚面試官是用什麼順序來進行氣泡排序的)這裡預設是用升序來進行排序的。

2、氣泡排序思路(第一層)是先從第一個數開始冒泡(對應陣列中的a[0]的值),然後與第二個數進行比較(對應陣列中的a[1]的值)。

       a.假如a[0]>a[1],a[0]a[1]交換位置。小的值放在前面,大的值放在後面。也就說a[1]的位置現在放在第一位了,而a[0]的放在在第二位,但是a[0]繼續與後面的數值進行比較。道理和a[0]a[1]的過程一樣。直到找出該陣列的最大的值。並把這個最大值放在最後面的位置。第一層排序結束。

       b.假如a[0]<a[1],a[0]a[1]不交換位置。第一個if條件沒有執行。然後j++,然後變成a[1]與它相鄰的右邊的a[2]進行比較,以次類推,直到第一層排序結束,並把最大的值冒泡到最尾的位置。

3、每層的氣泡排序,都是把最大值往右移,在第一層執行完後,已經把最大值固定在最後面的位置,所以在第二層冒泡的時候,執行j--2步。第三層,第四層....都是在原來基礎上-1

4、全部資料按升序順序冒泡排好後,最後用for迴圈輸出資料。

5、注意事項:核心思想是兩個巢狀for迴圈。第一個for迴圈控制層數fori=0i<ni++)(n是數組裡資料的個數)。第二個

for迴圈控制這層裡面的資料交換的次數forj=0j<n--i;j++)(i的值會增大,因為隨著你每一次都遍歷完成後,就固定了最大的值。不必要再與這個最大值比較了。所以在第二個for迴圈裡面的迴圈的次數會變少)。

6、菜鳥一枚。有什麼不對的地方。還請大家多多海涵。並懇求大家幫指出來。

程式碼如下:

#include<stdio.h>

int main(){

   int a[8] = {33,27,58,98,77,56,11,9};

   int i,j;

   int temp;

   for(i=0;i<=7;i++){

     for(j=0;j<=7-i-1;j++){

        if(a[j]>a[j+1]){

            temp = a[j];

            a[j] = a[j+1];

            a[j+1] = temp;

        }

     }

   }

   for(i=0;i<=7;i++){

    printf("%d  ",a[i]);

   }

   return 0;

}