雞尾酒演算法排序

2022-08-26 13:12:10 字數 1402 閱讀 3286

一、什麼時雞尾酒排序?

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

二、雞尾酒演算法思想

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

列舉乙個最簡單的栗子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--)

}if(issorted)

}}

大迴圈中我們將迴圈輪次優化為array.length/2次,奇數輪比較順序從左到右,每一輪 j 的開始項也從冒泡演算法的0變成了 i ,因為下面還有偶數輪比較排序,偶數輪排序會將最左邊的元素變成有序區。

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

public

void sortarray(int

array)

}rightborder =lastrightindex;

if(issorted)

//偶數輪比較

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

}leftborder =lastleftindex;

if(issorted)

}}

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

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

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

排序演算法 雞尾酒排序

雞尾酒排序是一種在氣泡排序的基礎上進行改進的演算法。和氣泡排序的從陣列的一端乙個個排序到另一端的單方向的順序不同,雞尾酒排序的元素比較和交換的雙向的。雙向是什麼意思呢?就是說,對於雞尾酒排序,第一輪從左到右進行排序,這裡和氣泡排序一模一樣,但是第二輪就不一樣了,此時需要的是從右到左,換個方向進行排序...

雞尾酒排序

氣泡排序是從陣列的一側到另一側為一輪,根據條件兩兩交換,例如關於氣泡排序中的一組資料3 2 5 4 6 1 8 9 7,優化的氣泡排序在經過六輪之後得到排好的陣列,而雞尾酒排序是一輪次比較兩回 先從左到右比較,如果左邊比右面大,交換位置 然後從右到左比較,左邊比右邊大,交換位置。就用冒泡中的那組數從...

雞尾酒排序

雞尾酒排序是一種定向的氣泡排序,也可以稱為攪拌排序 漣漪排序。是氣泡排序的一種變形。和氣泡排序的區別在於,雞尾酒排序採用了雙向比較並替換的原理。基本原理 第一步 宣告兩個臨時指標left和right,分別指向第乙個元素和最後乙個元素。第二步 每一輪比較時,從right往left方向查詢最大數,放到r...