經典演算法題每日演練 第二十三題 雞尾酒排序

2021-09-22 20:37:35 字數 2354 閱讀 5829

原文:

經典演算法題每日演練——第二十三題 雞尾酒排序

這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。

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

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

到小排序。

從圖中可以看到,第一次正向比較,我們找到了最大值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 }

經典演算法題每日演練 第二十三題 雞尾酒排序

這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫 雙向氣泡排序 我想作為碼農的話,不可能不知道氣泡排序,冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小...

經典演算法題每日演練 第二十三題 雞尾酒排序

這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫 雙向氣泡排序 我想作為碼農的話,不可能不知道氣泡排序,冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小...

經典演算法題每日演練 第二十三題 雞尾酒排序

這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫 雙向氣泡排序 我想作為碼農的話,不可能不知道氣泡排序,冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小...