八大排序算法之冒泡法

八大排序算法之冒泡法

冒泡排序(Bubble Sort),是一種計算機科學領域基本的排序算法。
它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。在不斷的遍歷過程中,大數不斷“沉底”,小數則不斷“上浮”,因此稱之爲冒泡法。

算法原理

  1. 依次比較數列中的相鄰元素,若當前元素數值大於後一個元素,則二者交換
  2. 單輪比較之後,數列中最大的數沉底,放置在數列的最後
  3. 重複上述比較,因大數已經沉底,故每次比較,最後一個不參與
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。此時大數沉底,小數上浮,形成有序數列

算法複雜度

最好的時間複雜度爲O(n)
最壞的時間複雜度,若初始文件是反序的,需要進行 n-1趟排序。每趟排序要進行 n-1-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,其時間複雜度爲O(n`2)
冒泡法排序是一種穩定的排序

算法實現

void Bubble(int *a,int n)
{
    int i,j;
    int temp;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
        {
            if(a[j+1]<a[j])
            {
                temp = a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
}

測試代碼:

int main()
{
    int i;
    int a[11]= {2,1,6,5,8,3,2,9,48,4,-1};
    Bubble(a,11);
    for(i=0;i<11;i++)
        printf("%d\t",a[i]);
        return 0;
}

代碼測試通過。
這裏可以看到算法的動態演示。

点赞