冒泡算法-C語言

什么是冒泡排序呢?冒泡排序的英語名是Bubble Sort,是一種最基礎(chǔ)的交換排序。
大家一定都喝過汽水吧,汽水中常常有許多小小的氣泡,往上飄,這是因為組成小氣泡的二氧化碳比水要輕,所以小氣泡才會一點一點的向上浮。而冒泡排序之所以叫冒泡排序,正是因為這種排序算法的每一個元素都可以向小氣泡一樣,根據(jù)自身大小,一點一點向著數(shù)組的一側(cè)移動。具體如何移動呢?我們來看一下例子, 有8個數(shù)組成一個無序數(shù)列:5,8,6,3,9,2,1,7,希望從大到小排序。按照冒泡排序的思想,我們要把相鄰的元素兩兩進行比較,根據(jù)大小交換元素的位置,
利用雙重for循環(huán)語句可以達到冒泡排序的方法 ,過程如下:
第一輪排序:

1、首先讓5和8進行交換,發(fā)現(xiàn)5比8小,因此元素位置不變。

2、接下來讓8和6比較,發(fā)現(xiàn)8比6大,所以要交換8和6的位置。

image.png

![8和6交換位子]

3、繼續(xù)讓8和3比較,發(fā)現(xiàn)8比3要大,所以8和3 交換位置。

4、繼續(xù)讓8和9進行比較,發(fā)現(xiàn)8比9小,不用交換

5、9和2進行比較,發(fā)現(xiàn)9比2大,進行交換

6、繼續(xù)讓9和1進行比較,發(fā)現(xiàn)9比1大,所以交換9和1的位置。

7、最后,讓9和7交換位置,這樣一來,元素9作為數(shù)列的最大元素,就已經(jīng)排序好了。

下面我們來進行第二輪排序:

1、首先讓5和6比較,發(fā)現(xiàn)5比6小,位置不變

2、接下來讓6和3比較,發(fā)現(xiàn)6比3大,交換位置

3、接下來讓6和8比較,6比8小,位置不變

4、8和2比較。8比2大,交換位置

5、接下來讓8和1比較,8比1大,因此交換位置

6、繼續(xù)讓8和7比較,發(fā)現(xiàn)8比7大,交換位置

接著第三輪——>第八輪

到此為止,所有的元素都是有序的了,這就是冒泡排序的整體思路。

原始的冒泡排序是穩(wěn)定的,由于該排序算法的每一輪都要遍歷一遍所有的元素,輪轉(zhuǎn)的次數(shù)和元素數(shù)量相當,所以時間復(fù)雜度為O(N^2)。
下面用C語言描述:

#include<stdio.h>
#include<stdlib.h>
 
void BubbleSort(int a[], int len)
{
    int i, j, temp;
    for (j = 0; j < len - 1; j++)
    {
        for (i = 0; i < len - 1 - j; i++)
        if (a[i] > a[i + 1])
        {
            temp = a[i];
            a[i] = a[i + 1];
            a[i + 1] = temp;
        }
    }
}
 
int main()
{
    int arr[] = { 5, 8, 6, 3, 9, 2, 1, 7 };
    int len = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    printf("排序前:");
    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    BubbleSort(arr, len);
    printf("排序后:");
    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    system("pause");
    return 0;
}

這個代碼很簡單,使用雙循環(huán)的方式進行排序。外部的循環(huán)控制所有回合,內(nèi)部循環(huán)代表每一輪的冒泡處理,先進行元素比較,再進行元素交換。那么這個代碼該怎么進行優(yōu)化呢??我們現(xiàn)在來回顧一下之前的描述細節(jié),仍然以 5,8,6,3,9,2,1,7 為例,當排序伏安法分別執(zhí)行到第六、第七、第八輪的時候,數(shù)列的狀態(tài)其實已經(jīng)變?yōu)橛行虻牧恕?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容