排序演算法系列 氣泡排序

2021-10-24 11:16:18 字數 1361 閱讀 4974

對陣列array[n],其陣列長度為n,元素索引0~n-1,對其進行公升序排序,針對n<=10時,可選擇氣泡排序

氣泡排序要點:

1.氣泡排序有兩層迴圈,外層迴圈用來計算有多少個數i不再需要比較,記憶體迴圈負責從index0~index(n-i-1)將相鄰元素進行比較和交換,簡單來說,第一輪排序時,內層比較完後使陣列的最大的元素被交換至陣列的末尾,第二輪比較時,由於第一輪排序中記憶體比較將陣列最大值放到了陣列的末尾(公升序的正確位置),因此第二輪迴圈時內層比較只需要比較陣列末尾元素之前的元素,第二輪排序後,會將陣列的第二大元素排在陣列的倒數第二的位置,。。。如此往復,最後一輪排序時,將只有兩個元素進行比較;

有點囉嗦....,可以參考這個文章的介紹

2.其中外層排序的輪數 i 為[0,length-1)區間,即外層迴圈比較length-1次,比較簡單的理解就是如果陣列array=,那麼i從0開始,當i<2-1時,進行第一輪排序,很顯然這只需要進行一輪排序即可,;

3.內層迴圈在陣列索引 j =0 到 j =length-i-1(左閉右開)範圍內,即每一輪排序比較 length-i 次,對元素進行array[j]>array[j+1] ?的比較,因此需要比較lebgth-i-1次比較或者交換,以確保陣列中任意array[j+1]>array[j],接著上面的array=的例子,外層進行第一輪排序,i=0,這裡比較次數就是2-0-1=1次。

#include #include #include int main()

printf("未排序的陣列:");

for (int i = 0; i < 10; i++)

printf("\n");

bubblesort(array);

printf("排序後的陣列:");

for (int i = 0; i < 10; i++)

printf("\n");

return 0;

}// 氣泡排序函式bubblesort()定義

void bubblesort(int array)

// 外層迴圈 i:[0, length-1),決定每輪多少個數不需要進行比較

for (int i = 0; i < length-1; ++i) }}

}

時間複雜度分析:

最好最壞

平均穩定性

時間複雜度

o(n)

o(n^2)

o(n^2)

穩定對於陣列長度為n,第1輪比較:n-1次,

第2輪比較:n-2次,

第n-2輪比較:2次

第n-1輪比較:1次

所以總共需要比較1+2+...+n-1=(n-1)(n)/2次,基本為o(n^2)次,這不是很理想,如果陣列長度比較大,該方式時間效率低

排序演算法系列 氣泡排序

氣泡排序是是一種比較基礎簡單的演算法。它的原理是通過對比前後的元素大小,將較大的數換到後面的方式來實現排序 舉個例子 假如現在有乙個無序陣列disorder arr 4,2,19,10,1 第一步 取第0個元素4,和第1個元素2 對比,發現4比2大。第二步 交換4與2的索引。即第0個元素為2,第1個...

演算法系列 氣泡排序

在我們的生活中,撲克牌應該是每乙個人的娛樂專案之一吧。在我們玩撲克牌的過程中,我們也可以體會到學習的奧秘。我們會根據手裡的牌,從小到大進行排序 即小的牌在前面,大的牌在後面 在這個過程中,我們可以體會並學習氣泡排序的神奇。氣泡排序 臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣...

排序演算法系列之氣泡排序

核心思想 氣泡排序是一種典型的 交換排序 通過比較相鄰元素大小來決定是否交換位置 如上圖所示,以一組資料 為例,進行氣泡排序的演算法演示 氣泡排序 c void swap int a,int b void bubblesort vector vi 演算法改進說明 1,對於是否已經是有序排列進行判斷 ...