冒泡排序
基本思想
交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,若反序即進行交換,直到沒有反序的記錄爲止。
冒泡排序的基本思想是:每次比較兩個相鄰的元素,如果他們的順序錯誤就把他們交換過來。
每次都是比較相鄰的兩個數,如果後面的數比前面的數大,則交換這兩個數的位置。一直比較下去直到最後兩個數比較完畢後,最小的數就在最後一個了。就如同是一個氣泡,一步 一步往後“翻滾”,直到最後一位。
每將一個數歸位我們將其稱爲“一趟”。
總結
如果有 n 個數進行排序,只需將 n-1 個數歸位,也就是說要進行 n-1 趟操作。而“每一 趟”都需要從第 1 位開始進行相鄰兩個數的比較,將較小的一個數放在後面,比較完畢後向後挪一位繼續比較下 面兩個相鄰數的大小,重複此步驟,直到最後一個尚未歸位的數,已經歸位的數則無需再進行比較。
編碼
#include <stdio.h>
int main()
{
int a[100],i,j,t,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
//冒泡排序的核心部分
//n個數排序,只用進行n-1趟
for(i=1;i<=n-1;i++) {
//從第1位開始比較直到最後一個尚未歸位的數,想一想爲什麼到n-i就可以了。
for(j=1;j<=n-i;j++) {
if(a[j]<a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar();getchar();
return 0;
}
冒泡排序的核心部分是雙重嵌套循環。
時間複雜度是 O(N2)。