10 3 交換排序(1)氣泡排序

2021-08-14 18:28:52 字數 1499 閱讀 9895

氣泡排序的思想和其名字一樣直觀,把整個表看作乙個水池,資料看作石頭,重的自然沉下去而輕的會浮上來。當然在程式裡面,直接沉下去和直接浮上來都是不可能的,因此氣泡排序就是相鄰元素進行比較,如果逆序了,就相互交換,如此迭代直到序列有序為止。

氣泡排序每次迭代產生的有序區都是有序的(注意參考下面的實現理解)。

template

void bubble_sort(std::vector

<_ty> & a)

}

對於一組測試資料5 4 11 18 1 70 35 90 100 2,輸出每一次迭代的結果如下:

1       5       4       11      18      2       70      35      90      100

1 2 5 4 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

1 2 4 5 11 18 35 70 90 100

氣泡排序使用了兩層迴圈,第一層迴圈迭代n−

1 次,而內層迴圈則每次從最後乙個元素開始迭代到當前

i 的位置之前。因此不難得出總的時間複雜度是o(

n2)的,並且對於任何情況,內層迴圈都是如此執行(if語句跟是否已經有序沒有影響),都滿足o(

n2) 的時間複雜度。

空間複雜度是o(

1)的,因為只用了幾個臨時變數。

穩定性來說,氣泡排序是穩定的。設a[

t1]=

a[t2

] ,其中t1

,那麼a[

t2] 所對應的元素被冒泡到a[

t1+1

] 時,就不滿足if語句的條件,也就不會被換到a[

t1] 之前。

交換排序 氣泡排序

交換排序 兩兩比較待排序記錄的關鍵碼,若是逆序,則交換,直到無逆序。其中最簡單的交換排序是 氣泡排序。氣泡排序 bubble sort,也叫起泡排序 不斷地比較相鄰的記錄,若是不滿足排序要求,則交換。交換時,可從前向後,也可從後向前。看乙個從前向後的排序過程 原序列 12 3 45 33 6 下標 ...

氣泡排序 交換排序

最壞情況下,直接插入排序時間複雜度為 n 最小時間代價為 n 平均時間代價為 n 附加儲存空間 乙個儲存單位 穩定性 穩定 原址性 是 緊緻性 乙個比較,三個賦值操作 特點 對於基本有序,或偶爾有幾個在有序位置附近時,效率高,只有直接插入排序和它達到一樣的效果 整體效果不如直接插入排序,因為,直接插...

交換排序 氣泡排序

1.原理 從小到大排序 存在10個不同大小的氣泡,由底至上地把較少的氣泡逐步地向上公升,這樣經過遍歷一次後,最小的氣泡就會被上公升到頂 下標為0 然後再從底至上地這樣公升,迴圈直至十個氣泡大小有序。在 氣泡排序中,最重要的思想是兩兩比較,將兩者較少的公升上去 氣泡排序最壞情況的時間複雜度是o n 2...