雞尾酒演算法實現氣泡排序的優化

2021-08-22 02:19:33 字數 1075 閱讀 9831

一、什麼時雞尾酒排序?

雞尾酒排序又稱為快樂小時排序,它基於氣泡排序進行的優化方案。

二、雞尾酒演算法思想

氣泡排序是元素單向比較,而雞尾酒排序卻是雙向。

列舉乙個最簡單的栗子array[2, 3, 4, 5, 6, 7, 8, 9, 1]

如果按照傳統的氣泡排序進行操作,

第一輪結果:[2, 3, 4, 5, 6, 7, 8, 1, 9],只有9和1交換;

第二輪結果:[2, 3, 4, 5, 6, 7, 1,8,9],只有8和1交換;

第三輪結果:[2, 3, 4, 5, 6, 1,7, 8,9],只有7和1交換;

第八輪結果:[1,2, 3, 4, 5,6, 7, 8,9],只有2和1交換;

每一輪執行過程中,前面元素的比較,很明顯做了無用功,對於本次栗子中的陣列,如果元素比較的順序是從右邊開始,那就省了很多功夫,加入雞尾酒演算法,可以實現這個操作。

雞尾酒演算法實現氣泡排序的優化第一版:

public void sortarray(int array)

}if(issorted)

//偶數輪比較

for(int j=array.length-i-1; j>i; j--)

}rightborder = lastrightindex;

if(issorted)

//偶數輪比較

for(int j=rightborder; j>leftborder; j--){

if(array[j]與傳統冒泡法的第二版優化一樣,設定了每一輪的迴圈邊界,由於雞尾酒演算法是雙向排序的,所以這裡的邊界也分別定義了左、右邊界 leftborder 和 rightborder ,即每一輪迴圈都是以這兩個邊界為迴圈次數計算,相對於雞尾酒第一版,第二版比較容易理解。

雞尾酒演算法實現氣泡排序的優化確實可以很大程度上減少了比較的無用功,同時也要注意它的**量也是之前的兩倍。

雞尾酒演算法排序介紹至此。

氣泡排序 雞尾酒排序

include 交換函式 void swap int a,int i,int j 列印陣列 void printa int a,int len printf n 氣泡排序 int main1 int len sizeof a sizeof a 0 int i,j 外層迴圈控制輪數,每一輪找出乙個最大...

雞尾酒演算法排序

一 什麼時雞尾酒排序?雞尾酒排序又稱為快樂小時排序,它基於氣泡排序進行的優化方案。二 雞尾酒演算法思想 氣泡排序是元素單向比較,而雞尾酒排序卻是雙向。列舉乙個最簡單的栗子array 2,3,4,5,6,7,8,9,1 如果按照傳統的氣泡排序進行操作,第一輪結果 2,3,4,5,6,7,8,1,9 只...

氣泡排序(雞尾酒排序)的Java實現

氣泡排序 實現 public class bubblesort sort1 arr system.out.println 第二版本 arr new int sort2 arr system.out.println 雞尾酒排序 arr new int sort3 arr 第三版本,雞尾酒排序演算法 p...