1. 程式人生 > 其它 >資料結構與演算法 - 氣泡排序

資料結構與演算法 - 氣泡排序

氣泡排序

氣泡排序是通過比較兩個相鄰元素的大小實現排序,如果前一個元素大於後一個元素,就交換這兩個元素。這樣就會讓每一趟冒泡都能找到最大一個元素並放到最後。

[ 8, 1, 4, 6, 2, 3, 5, 7 ] 為例,對它進行氣泡排序:



程式碼實現

vector<int> bubble_sort(vector<int> &arr)
{
    int aSize = arr.size();
    for(int i = 0; i < aSize - 1; i++)
    {
        bool isChange = false;
        for(int j = 0; j < aSize - 1 - i; j++)
        {
            if(arr[j] > arr[j+1])
            {
                // swap arr[j] and arr[j+1]
                arr[j] = arr[j] & arr[j+1];
                arr[j+1] = arr[j] & arr[j+1];
                arr[j] = arr[j] & arr[j+1];
                isChange = true;
            }
        }
        if(!isChange)
        {
            break;
        }
    }
    return arr;
}

特點

穩定性:它是指對同樣的資料進行排序,會不會改變它的相對位置。比如 [ 1, 3, 2, 4, 2 ] 經過排序後,兩個相同的元素 2 位置會不會被交換。氣泡排序是比較相鄰兩個元素的大小,顯然不會破壞穩定性。

空間複雜度:由於整個排序過程是在原資料上進行操作,故為 \(O(1)\) ;

時間複雜度:由於嵌套了 2 層迴圈,故為 \(O(n^2)\);