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迴圈控制層數for(i=0;i<n;i++)(n是數組裡資料的個數)。第二個
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;
}