排序演算法 之 氣泡排序

2021-07-26 16:53:01 字數 1300 閱讀 3768

之前看到乙個題目,大概是:有乙個長度為n的陣列,陣列內的元素取值範圍為0到m,且不相等,要求元素經過n次移動後使陣列有序(即演算法的複雜度為o(n))。看到題目後想了快速排序和歸併排序發現並不能滿足題目要求,直到有次看書又看到了桶排序然後豁然開朗,所以決定把這些排序演算法再寫一遍,加深記憶。

約定:之後的文章預設待排序的陣列大小都為n,排序結果為由小到大,採用c#作為**實現。

1.基本的氣泡排序演算法:

基本思想:

氣泡排序外層共需要對序列進行n-1次遍歷,內層從e[0]到e[n-i](i為外層遍歷的次數)兩兩進行比較,如果e[j-1]>e[j]則進行交換,直到比較e[0]和e[1]後為止,氣泡排序演算法的時間複雜度為o(n²);;

**實現:

///

///基本的氣泡排序演算法

//////

///public

static

void bubblesort(int intarray, int

length)}}

}

2.改進的氣泡排序演算法一:
上面的排序演算法不管某次迴圈後陣列是否已經有序,依然繼續遍歷,這樣的話在對基本有序的陣列進行排序是效率顯然是很低的,我們可以設定乙個標誌位,判斷某次遍歷後元素是否發生了交換,如果沒有發生交換則證明排序完成,結束遍歷從而提高效率 ;
**實現:

///

///改進後的氣泡排序演算法1

///設立標誌判斷某次迴圈是否發生了交換,如果沒有發生交換則證明排序完成

//////

///public

static

void bubblesort1(int intarray, int

length)

}k--;}}

3.改進的氣泡排序演算法二:

上面改進後的氣泡排序演算法還可以繼續改進,比如在進行第一次遍歷前序列元素排列是這樣的,我們發現當把元素5,4進行交換後,後面的元素已經有序,則我們可以設定乙個標誌,記錄最後

一次交換元素的位置,在以後的遍歷中可以根據設定的標誌來縮短要比較元素的下界; 3

2154

6789

**實現:

///

///改進後的氣泡排序演算法2

///記錄最後一次交換的位置作為排序交換的結束位置

//////

///public

static

void bubblesort2(int intarray, int

length)}}

}

以上就是氣泡排序演算法的內容。

排序演算法之氣泡排序

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

排序演算法之氣泡排序

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

排序演算法之氣泡排序

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