排序演算法之 氣泡排序 及其時間複雜度和空間複雜度

2021-06-29 04:27:59 字數 2435 閱讀 2246

氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

氣泡排序演算法是所有排序演算法中最簡單的(前面也提到過),在生活中應該也會看到氣泡從水裡面出來時,越到水面上氣泡就會變的越大。在物理上學氣壓的時候好像也看到過這種現象;其實理解氣泡排序就可以根據這種現象來理解:每一次遍歷,都把大的往後面排(當然也可以把小的往後面排),所以每一次都可以把無序中最大的(最小)的元素放到無序的最後面(或者說有序元素的最開始);

基本步驟:

1、外迴圈是遍歷每個元素,每次都放置好乙個元素;   

2、內迴圈是比較相鄰的兩個元素,把大的元素交換到後面;

3、等到第一步中迴圈好了以後也就說明全部元素排序好了;

#include//列印陣列元素

void print_array(int *array, int length)

printf("\n\n"); }

void bubblesort(int array, int length)

}

}

} int main(void)

; print_array(array, 12);

bubblesort(array, 12);

print_array(array, 12);

return 0;

}

執行結果:

這個時間複雜度還是很好計算的:外迴圈和內迴圈以及判斷和交換元素的時間開銷;

最優的情況也就是開始就已經排序好序了,那麼就可以不用交換元素了,則時間花銷為:[ n(n-1) ] /  2;所以最優的情況時間複雜度為:o( n^2 );

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

綜上所述:

最優的時間複雜度為:o( n^2 ) ;有的說 o(n),下面會分析這種情況;

最差的時間複雜度為:o( n^2 );

平均的時間複雜度為:o( n^2 );

空間複雜度就是在交換元素時那個臨時變數所佔的記憶體空間;

最優的空間複雜度就是開始元素順序已經排好了,則空間複雜度為:0;

最差的空間複雜度就是開始元素逆序排序了,則空間複雜度為:o(n);

平均的空間複雜度為:o(1);

有很多人說氣泡排序的最優的時間複雜度為:o(n);其實這是在**中使用乙個標誌位來判斷是否已經排序好的,修改下上面的排序**:

void bubblesort(int array, int length)

}

if (flag) break;

}

}

根據上面的**可以看出,如果元素已經排序好,那麼迴圈一次就直接退出。或者說元素開始就已經大概有序了,那麼這種方法就可以很好減少排序的次數;其實我感覺這種方法也有弊端,比如 要額外的判斷下,以及賦值操作;

有人會說這個空間複雜度能降到0,因為空間複雜度主要是看使用的輔助記憶體,如果沒有輔助記憶體變數,那麼可以說空間複雜度為0;所以該演算法中空間複雜度一般是看交換元素時所使用的輔助空間;

1、 a  = a + b; b = a - b; a = a - b;

2、 a = a * b;   b =  a / b; a = a / b;

3、 a = a ^ b;  b =  a ^ b;a = a ^ b;

上面幾種方法都可以不使用臨時空間來交換兩個元素,但是都有些潛在的問題,比如 越界;所以個人覺得還是老老實實的用個臨時變數吧,這樣演算法意圖就比較清晰了。

若有不正確之處,望大家指正,共同學習!謝謝!!!

排序演算法之 氣泡排序 及其時間複雜度和空間複雜度

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,...

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

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

常用排序及其時間複雜度

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