原文:
經典演算法題每日演練——第二十三題 雞尾酒排序
這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。
要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫「雙向氣泡排序」,我想作為碼農的話,不可能不知道氣泡排序,
冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小到大排序,從另一端進行從大
到小排序。
從圖中可以看到,第一次正向比較,我們找到了最大值9.
第一次反向比較,我們找到了最小值1.
第二次正向比較,我們找到了次大值8.
第二次反向比較,我們找到了次小值2
最後就大功告成了。
下面我們看看**:
1using
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 }
經典演算法題每日演練 第二十三題 雞尾酒排序
這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫 雙向氣泡排序 我想作為碼農的話,不可能不知道氣泡排序,冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小...
經典演算法題每日演練 第二十三題 雞尾酒排序
這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫 雙向氣泡排序 我想作為碼農的話,不可能不知道氣泡排序,冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小...
經典演算法題每日演練 第二十三題 雞尾酒排序
這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫 雙向氣泡排序 我想作為碼農的話,不可能不知道氣泡排序,冒泡是乙個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小...