氣泡排序及其時間 空間複雜度解析

2021-10-09 02:08:36 字數 1093 閱讀 9245

1.概念及思路:重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故稱為"氣泡排序"。

2.**實現

#include

using

namespace std;

void

bubblesort

(int

*a,int size)}}

}int

main()

; cout <<

"原來的陣列為:"

<< endl;

for(

int i =

0; i <

10; i++

) cout << endl;

bubblesort

(a,10);

cout <<

"氣泡排序後的陣列為:"

<< endl;

for(

int i =

0; i <

10; i++

)return0;

}

執行結果為:

時間複雜度:外迴圈和內迴圈以及判斷和交換元素的時間開銷。

最優的情況也就是開始就已經排序好序了,那麼就可以不用交換元素了,由於外層迴圈為n,內層所需要迴圈比較的次數為(n-1)、(n-2)…1由等差數列求和得時間花銷為:[ n(n-1) ] / 2;所以最優的情況時間複雜度為:o( n^2 )。

最差的情況也就是開始的時候元素是逆序的,那麼每一次排序都要交換兩個元素,則時間花銷為:[ 3n(n-1) ] / 2;(其中比上面最優的情況所花的時間就是在於交換元素的三個步驟);所以最差的情況下時間複雜度為:o( n^2 );

空間複雜度:氣泡排序的輔助變數空間僅僅是乙個臨時變數,並且不會隨著排序規模的擴大而進行改變,所以空間複雜度為o(1)。

堆排序及其時間空間複雜度分析

堆排序 乙個建立堆的函式,乙個排序的函式 heap初始建堆 大根堆 取得左右孩子中最大的結點,用其和根節點交換,然後以此孩子結點繼續建堆 heapsort 堆排序,先從非葉節點到跟進行迴圈建堆,交換根節點和最後乙個元素的位置,在迴圈建堆,時間複雜度 主要在於初始化建堆和後來交換後迴圈建堆的過程。迴圈...

常用排序及其時間複雜度

1.選擇排序 不穩定,時間複雜度 o n 2 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。2.插入排序 穩定,時間複雜度 o n 2 插入排序的基本思想是,經過i 1遍處理後,...

常用排序及其時間複雜度

1.選擇排序 不穩定,時間複雜度 o n 2 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。2.插入排序 穩定,時間複雜度 o n 2 插入排序的基本思想是,經過i 1遍處理後,...