氣泡排序(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...