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遍處理後,...