排序演算法之氣泡排序

2021-09-26 09:43:45 字數 1471 閱讀 9393

**

氣泡排序(bubble sort)

選擇排序(selection sort)

插入排序(insertion sort)

希爾排序(shell sort)

歸併排序(merge sort)

快速排序(quick sort)

堆排序(heap sort)

鴿巢排序(pigeonhole sort)

氣泡排序(bubble sort):

氣泡排序是一種穩定排序,其實現邏輯比較簡單直觀,但是效率比較底下。

基本思想:

氣泡排序是一種交換排序,核心是冒泡,把陣列中最小(或最大)的元素往後邊冒,冒的過程就是和他相鄰的元素交換。

重複走訪要排序的數列,通過兩兩比較相鄰記錄的排序碼。一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

實現邏輯:

(1)比較相鄰的元素。如果前者比後者大(小),就交換他們兩個。

(2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

(3)針對所有的元素重複以上的步驟,除了最後乙個。

(4)持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

所以,共需要定位n-1個數,且是穩定排序,即a與b相等,排序前a在b前,排序後,a也處於b前面,二者相對位置不變。

時間複雜度:

氣泡排序對n個專案需要o(n²})的比較次數,且可以原地排序,外層迴圈 n 次,內層最多時迴圈 n – 1次、最少迴圈 0 次,平均迴圈(n-1)/2; 所以迴圈體內總的比較交換次數為:n*(n-1) / 2 = (n^2-n)/2, 所以平均時間複雜度為o(n²)

圖示:

實現**:

#include void show(int * p, int len)

puts("\b;");

}static void swap(int* p, int* q)

void bubblesort(int* p, int len) //氣泡排序

} }}int main()

; int len = (int) sizeof(arr) / sizeof(*arr);

bubblesort(arr, len);

show(arr, len);

return 0;

}

總結:氣泡排序是一種比較經典也比較簡單的排序,其**實現簡單,但效率較低,當資料規模較小時,是一種比較簡便實用的排序演算法,當資料規模較大時,效率會遠低於其他排序算

排序演算法之氣泡排序

參考 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。若...

排序演算法之氣泡排序

對於大多數學計算機的人來說,氣泡排序應該都是接觸的第一種排序方式,氣泡排序的排序思想是比較簡單的,它的演算法的是 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了...

排序演算法之氣泡排序

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