氣泡排序及其優化

2021-10-05 13:49:20 字數 2740 閱讀 4284

氣泡排序(bubble sort),它是一種基礎的交換排序。

思想:把相鄰的元素兩兩比較,當乙個元素大於右側相鄰元素時,交換它們的位置,當乙個元素小於或等於右側相鄰元素時,位置不變。

待排序序列:

第一輪排序:

第2-7輪各輪排序的結果:

氣泡排序是一種穩定的排序,值相等的元素並不會打亂原本的順序。該排序演算法的每一輪都要遍歷所有元素,總共遍歷(元素數量-1)輪。所以平均時間複雜度為o(n²)。

//雙重迴圈進行排序,外部迴圈控制所有回合,內部迴圈實現每一輪的冒泡處理,先進行元素比較在進行元素交換。

public

class

sorttest}}

}public

static

void

main

(string[

] args)

;bubblesort

(array)

; system.out.

println

(arrays.

tostring

(array));

}}

第6輪排序後就已經是有序的了,可是演算法還是進行了第7輪排序.

解決思想:判斷出數列已經有序,做出標記,那麼剩下的幾輪排序就不必執行了。

按照氣泡排序的思想,第1輪只會交換4和2、4和1的位置,第2輪只會交換3和2、3和1的位置,但是右邊的許多元素已經是有序的了,第二輪排序時,後面的五個元素的已經是有序的了。因此後面的多次元素比較是沒有意義的。

解決思想:可以在每一輪排序後,記錄下來最後一次元素交換的位置,該位置為無序數列的邊界,再往後就是有序區了。

雞尾酒排序比較和交換的過程是雙向的。

第一輪(和氣泡排序一樣,8和1交換):

第二輪(從右往左):

第三輪(雖然實際上已經有序,但是流程並沒有結束):

public

class

cocktailsort}if

(issorted)

//偶數輪之前,重新標記為true

issorted =

true

;//偶數輪,從右向左比較和交換

for(

int j=array.length-i-

1; j>i; j--)}

if(issorted)}}

public

static

void

main

(string[

] args)

;sort

(array)

; system.out.

println

(arrays.

tostring

(array));

}}

**外層的大迴圈控制著所有排序組合,大迴圈內包含兩個小迴圈,第乙個小迴圈從左向右比較並交換元素,第二個小迴圈從右到左比較並交換元素。

雞尾酒排序:優勢:用在大部分元素已經有序的情況下。

優點:能夠在特定條件下,減少排序的回合數

缺點:**量幾乎增加了一倍。

氣泡排序及其優化

然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...

氣泡排序及其優化

課程名稱 資料結構 實驗專案名稱 排序演算法的實現與比較 實驗目的 1 掌握優化氣泡排序的演算法 實驗要求 1 對於輸入的任意乙個整型資料序列,將其進行氣泡排序,要求該氣泡排序的演算法為優化之後的演算法,即 a.設定flag變數,當一趟排序結束後flag的值未更新,剛說明序列已經有序,停止排序 b....

氣泡排序及其優化

bubble sort比較簡單,本文首先列出了基礎版本bubble sort的偽 之後做兩點小的優化。1.基礎版本bubblesort 原始版的bubblesort 時間複雜度為o n 2 function bubblesort array x,int length for int i 0 i le...