時間複雜度為o(n^2)
每次比較兩個相鄰元素,如果他們的順序錯誤就把它們交換過來。
例如我們需要將 12,35,99,18,76, 5個數進行從大到小排序,既然是從大到小排序,也就是越小越靠後。
首先比較第乙個數和第二個數,第乙個是12,第二個是35,發現12 小於35,由於是越小越靠後,因此要對這兩個數交換位置,那麼交換後的順序為 35,12,99,18,76。按照之前的方法,我們比較第二個和第三個數,第二個是12第三個是99,99大於12,所以要交換兩個數的位置,交換過的順序為 35,99,12,18,76。以此類推,可以通過下圖來看12的位置變化:
12,35,99,18,76 初始資料
35,12,99,18,76 第1次交換
35,99,12,18,76 第2次交換
35,99,18,12,76 第3次交換
35,99,18,76,12 第4次交換 (5-1,假設要排序的個數為m,那麼比較次數m-1,那麼最糟糕情況下互動次數就是m-1)
進行4次交換後,就成功把最小的數12給排到最後面了。
現在我們已經將最小的數給歸位了,現在對剩下的數再進行歸位,細節我就不講了,就將下重要的。
對剩下4個數進行排序:
99,18,76,35,12 (交換了3次,比較次數3)
對剩下3個數進行排序:
99,76,18,35,12 (比較了1次【99,76】,交換了1次【18,76】,比較次數2)
對剩下2個數進行排序:
99,76,18,35,12 (交換了0次,比較1次)
就如同乙個氣泡,一步步向上翻滾,最後成功浮出水面,所以他叫氣泡排序。
//生成資料來源
//待排序個數
int n=5;
int src=new int[n];
src[0]=12;
src[1]=35;
src[2]=99;
src[3]=18;
src[4]=76;
//氣泡排序
//遍歷第乙個到最後乙個
for (int i=0; i計算最糟糕情況
要排序的個數n
第一層for
執行了n次
第二層for
第一次比較了n-1次
第二次比較了n-2次
第n-1次比較了1次
執行的總次數
count=3(1+2+3+4+.....+n-1)(n為正整數)
列印for
執行了n次
所有總的次數:
sum=n+3(1+2+3+4+...+n-1)+n+(n-n)=3(1+2+3+4+...+n-1+n)-n
如果n為偶數
sum=3* n/2*(n+1) -n=3/2(n^2+n)-n=1/2(3n^2+n)
如果n為奇數
sum=3((n-1)/2 *n+(n+1)/2)-n=3/2(n^2+1)-n=1/2(3n^2-2n+3)
所以最差的情況的時間複雜度為o(n^2),最好的情況我就不推了,o(n)
氣泡排序的時間複雜度
氣泡排序是一種用時間換空間的排序方法,最壞情況是把順序的排列變成逆序,或者把逆序的數列變成順序。在這種情況下,每一次比較都需要進行交換運算。舉個例子來說,乙個數列 5 4 3 2 1 進行冒泡公升序排列,第一次大迴圈從第乙個數 5 開始到倒數第二個數 2 結束,比較過程 先比較5和4,4比5小,交換...
氣泡排序 時間複雜度與空間複雜度
外迴圈是遍歷每個元素,每次都放置好乙個元素 內迴圈是比較相鄰的兩個元素,把大的元素交換到後面 等到第一步中迴圈好了以後也就說明全部元素排序好了 實現 include 列印陣列元素 void print array int array,int length printf n n void bubble...
時間複雜度計算
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如...