mysql 冒泡函式 氣泡排序演算法(超級詳細)

2021-10-17 12:44:52 字數 2592 閱讀 3070

氣泡排序是一種簡單的排序演算法,它也是一種穩定排序演算法。其實現原理是重複掃瞄待排序序列,並比較每一對相鄰的元素,當該對元素順序不正確時進行交換。一直重複這個過程,直到沒有任何兩個相鄰元素可以交換,就表明完成了排序。

一般情況下,稱某個排序演算法穩定,指的是當待排序序列中有相同的元素時,它們的相對位置在排序前後不會發生改變。

假設待排序序列為 (5,1,4,2,8),如果採用氣泡排序對其進行公升序(由小到大)排序,則整個排序過程如下所示:

1) 第一輪排序,此時整個序列中的元素都位於待排序序列,依次掃瞄每對相鄰的元素,並對順序不正確的元素對交換位置,整個過程如圖 1 所示。

圖 1 第一輪排序(白色字型表示參與比較的一對相鄰元素)

從圖 1 可以看到,經過第一輪氣泡排序,從待排序序列中找出了最大數 8,並將其放到了待排序序列的尾部,併入已排序序列中。

2) 第二輪排序,此時待排序序列只包含前 4 個元素,依次掃瞄每對相鄰元素,對順序不正確的元素對交換位置,整個過程如圖 2 所示。

圖 2 第二輪排序

可以看到,經過第二輪氣泡排序,從待排序序列中找出了最大數 5,並將其放到了待排序序列的尾部,併入已排序序列中。

3) 第三輪排序,此時待排序序列包含前 3 個元素,依次掃瞄每對相鄰元素,對順序不正確的元素對交換位置,整個過程如圖 3 所示。

圖 3 第三輪排序

經過本輪氣泡排序,從待排序序列中找出了最大數 4,並將其放到了待排序序列的尾部,併入已排序序列中。

4) 第四輪排序,此時待排序序列包含前 2 個元素,對其進行氣泡排序的整個過程如圖 4 所示。

圖 4 第四輪排序

經過本輪氣泡排序,從待排序序列中找出了最大數 2,並將其放到了待排序序列的尾部,併入已排序序列中。

5) 當進行第五輪氣泡排序時,由於待排序序列中僅剩 1 個元素,無論再進行相鄰元素的比較,因此直接將其併入已排序序列中,此時的序列就認定為已排序好的序列(如圖 5 所示)。

圖 5 氣泡排序好的序列

氣泡排序的實現**為(c 語言):

#include

//交換 a 和 b 的位置的函式

#define n 5

int a[n] = ;

void swap(int *a, int *b);

//這是帶輸出的氣泡排序實現函式,從輸出結果可以分析冒泡的具體實現流程

void bubsort_test();

//這是不帶輸出的氣泡排序實現函式,通過此函式,可直接對陣列 a 中元素進行排序

void bubsort_pro();

int main()

bubsort_test();

return 0;

void swap(int *a, int *b) {

int temp;

temp = *a;

*a = *b;

*b = temp;

//這是帶輸出的氣泡排序實現函式,從輸出結果,可以看到冒泡的具體實現流程

void bubsort_test() {

for (int i = 0; i < n; i++) {

//對待排序序列進行氣泡排序

for (int j = 0; j + 1 < n - i; j++) {

//相鄰元素進行比較,當順序不正確時,交換位置

if (a[j] > a[j + 1]) {

swap(&a[j], &a[j + 1]);

//輸出本輪氣泡排序之後的序列

printf("第%d輪氣泡排序:", i + 1);

for (int i = 0; i < n; i++) {

printf("%d ", a[i]);

printf("\n");

//這是不帶輸出的氣泡排序實現函式,通過此函式,可直接對陣列 a 中元素進行排序

void bubsort_pro() {

for (int i = 0; i < n; i++) {

//對待排序序列進行氣泡排序

for (int j = 0; j + 1 < n - i; j++) {

//相鄰元素進行比較,當順序不正確時,交換位置

if (a[j] > a[j + 1]) {

swap(&a[j], &a[j + 1]);

執行結果為:

第1輪氣泡排序:1 4 2 5 8

第2輪氣泡排序:1 2 4 5 8

第3輪氣泡排序:1 2 4 5 8

第4輪氣泡排序:1 2 4 5 8

第5輪氣泡排序:1 2 4 5 8

通過分析氣泡排序的實現**可以得知,該演算法的最差時間複雜度為o(n2),最優時間複雜度為o(n),平均時間複雜度為 o(n2)。

氣泡排序 氣泡排序演算法優化

常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...

氣泡排序演算法 C 氣泡排序演算法排序詳解

氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...

氣泡排序演算法

氣泡排序演算法策略 重複的交換相鄰的兩個反序元素。氣泡排序演算法步驟 取值 去陣列沒有進行排序的最後乙個數 對比 將選取從最近往前對比 交換 當對比的數比自己大時 從小到大排序 進行交換值。偽 如下 bubblesort a 1 for i 1 to length a 2 do for j leng...