【筆記】氣泡排序
氣泡排序是最簡單的交換排序方法。
基本演算法思想:首先將第一個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序(
L.r[1].key>L.r[2].key L.r[1].key>L.r[2].key),則將兩個記錄交換之,然後比較第二個記錄和第三個記錄的關鍵字。依此類推,直至第n-1個記錄和第n個記錄的關鍵字進行過比較為止。上述過程稱為第一趟冒泡過程,其結果使得關鍵字最大的記錄被安置到最後一個記錄的位置上。然後進行第二趟氣泡排序,對前n-1個記錄進行同樣操作,其結果是使關鍵字次大的記錄被安置到第n-1個記錄的位置上。一般地,第i趟氣泡排序是從L.r[1] L.r[1]到L.r[n−i+1] L.r[n-i+1]依次比較相鄰李娜改革記錄的關鍵字,並在“逆序”時交換相鄰記錄,其結果是這n-i+1個記錄中關鍵字最大的記錄被交換到第n-i+1的位置上。
整個排序過程需進行k(
1 \leq k <n
)趟氣泡排序,顯然判別氣泡排序結束的條件應該是在一趟排序過程中沒有進行過交換記錄的操作。右下圖可見,在氣泡排序的過程中,關鍵字較小的記錄好比水中氣泡逐趟向上漂浮,而關鍵字較大的記錄好比石塊往下沉,每一趟有一塊“最大”的石頭沉到水底。
- 實現原始碼
#define TRUE 1
#define FALSE 0
#define N 8
typedef int Status;
void bubble_sort(int a[],int n)
{ /* 將a中整數序列重新排列成自小至大有序的整數序列 */
int i,j,t;
Status change;
for(i=n-1,change=TRUE;i>1&&change;--i)
{
change=FALSE;
for(j=0;j<i;++j)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
change=TRUE;
}
}
}
void print(int r[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",r[i]);
printf("\n");
}
void main()
{
int d[N]={49,38,65,97,76,13,27,49};
printf("排序前:\n");
print(d,N);
bubble_sort(d,N);
printf("排序後:\n");
print(d,N);
}
- 測試結果
相關文章
- 氣泡排序筆記排序筆記
- 排序——氣泡排序排序
- 氣泡排序排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 排序之氣泡排序排序
- 排序:氣泡排序&快速排序排序
- js氣泡排序JS排序
- 氣泡排序-fusha排序
- 氣泡排序演示排序
- Shell氣泡排序排序
- d氣泡排序排序
- 氣泡排序正解排序
- JavaScript氣泡排序JavaScript排序
- java氣泡排序Java排序
- 氣泡排序 java排序Java
- php氣泡排序PHP排序
- Java 氣泡排序Java排序
- Javascript 氣泡排序JavaScript排序
- 氣泡排序(Java)排序Java
- 容器氣泡排序排序
- 氣泡排序1排序
- 氣泡排序法排序
- 基本排序之氣泡排序排序
- 排序:交換排序——氣泡排序法排序
- js氣泡排序動畫JS排序動畫
- 陣列氣泡排序陣列排序
- 淺析氣泡排序排序
- python氣泡排序Python排序
- 氣泡排序 bubble sort排序
- 淺談氣泡排序排序
- 氣泡排序文法排序
- 19_氣泡排序排序
- Python 氣泡排序Python排序
- 函式氣泡排序函式排序
- 排序演算法–氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法--氣泡排序排序演算法
- 選擇排序和氣泡排序排序