經典演算法23 雞尾酒排序

2021-08-14 20:27:23 字數 2180 閱讀 5067

要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫「雙向氣泡排序」,我想作為碼農的話,不可能不知道氣泡排序,

冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小到大排序,從另一端進行從大

到小排序。

從圖中可以看到,第一次正向比較,我們找到了最大值9. 

第一次反向比較,我們找到了最小值1.

第二次正向比較,我們找到了次大值8.

第二次反向比較,我們找到了次小值2

最後就大功告成了。

下面我們看看**:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.xml.xsl;67

namespace8;

1415 console.writeline("

\n排序前 => \n

", string.join(","

, list));

1617 list =cocktailsort(list);

1819 console.writeline("

\n排序後 => \n

", string.join(","

, list));

2021

console.read();22}

2324

///25

///雞尾酒排序

26///

27///

28///

29static list cocktailsort(listlist)

3046}47

48 console.writeline("

正向排序 =>

", string.join(","

, list));

4950

//從後到前的排序(降序)

51for (int n = list.count - i - 1; n >= i; n--)

5262}63

64 console.writeline("

反向排序 =>

從結果上面看,我們會發現,當陣列有序的時候,我們還會繼續往下排,知道完成length/2次,這個就跟沒優化之前的氣泡排序一樣,

此時我們可以加上乙個標誌位issorted來判斷是否已經沒有交換了,如果沒有,提前退出迴圈。。。

1

///2

///雞尾酒排序

3///

4///

5///

6static list cocktailsort(listlist)728

}2930 console.writeline("

正向排序 =>

", string.join(","

, list));

3132

//從後到前的排序(降序)

33for (int n = list.count - i - 1; n >= i; n--)

3446}47

48//

當不再有排序,提前退出

49if (!issorted)

50break;51

52 console.writeline("

反向排序 =>

", string.join(","

, list));53}

5455

return

list;

56 }

雞尾酒演算法排序

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

排序演算法 雞尾酒排序

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

雞尾酒排序

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