雞尾酒排序
這篇我們繼續扯淡一下雞尾酒排序,為了知道為啥取名為雞尾酒,特意看了下百科,見框框的話,也只能勉強這麼說了。
要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫“雙向氣泡排序”,我想作為碼農的話,不可能不知道氣泡排序,
冒泡是一個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小到大排序,從另一端進行從大
到小排序。
從圖中可以看到,第一次正向比較,我們找到了最大值9.
第一次反向比較,我們找到了最小值1.
第二次正向比較,我們找到了次大值8.
第二次反向比較,我們找到了次小值2
。。。
最後就大功告成了。
下面我們看看程式碼:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml.Xsl; 6 7 namespace ConsoleApplication1 8 { 9 class Program10 {11 static void Main(string[] args)12 {13 Listlist = new List () { 8, 1, 4, 2, 9, 5, 3 };14 15 Console.WriteLine("n排序前 => {0}n", string.Join(",", list));16 17 list = CockTailSort(list);18 19 Console.WriteLine("n排序後 => {0}n", string.Join(",", list));20 21 Console.Read();22 }23 24 /// 25 /// 雞尾酒排序26 /// 27 /// 28 ///29 static List CockTailSort(List list)30 {31 //因為是雙向比較,所以比較次數為原來陣列的1/2次即可。32 for (int i = 1; i list[m + 1])39 {40 var temp = list[m];41 42 list[m] = list[m + 1];43 44 list[m + 1] = temp;45 }46 }47 48 Console.WriteLine("正向排序 => {0}", string.Join(",", list));49 50 //從後到前的排序(降序)51 for (int n = list.Count - i - 1; n >= i; n--)52 {53 //如果前面大於後面,則進行交換54 if (n > 0 && list[n - 1] > list[n])55 {56 var temp = list[n];57 58 list[n] = list[n - 1];59 60 list[n - 1] = temp;61 }62 }63 64 Console.WriteLine("反向排序 => {0}", string.Join(",", list));65 }66 67 return list;68 }69 }70 }
從結果上面看,我們會發現,當陣列有序的時候,我們還會繼續往下排,知道完成length/2次,這個就跟沒最佳化之前的氣泡排序一樣,
此時我們可以加上一個標誌位IsSorted來判斷是否已經沒有交換了,如果沒有,提前退出迴圈。。。
1 ///2 /// 雞尾酒排序 3 /// 4 /// 5 ///6 static List CockTailSort(List list) 7 { 8 //判斷是否已經排序了 9 var isSorted = false;10 11 //因為是雙向比較,所以比較次數為原來陣列的1/2次即可。12 for (int i = 1; i list[m + 1])19 {20 var temp = list[m];21 22 list[m] = list[m + 1];23 24 list[m + 1] = temp;25 26 isSorted = true;27 }28 }29 30 Console.WriteLine("正向排序 => {0}", string.Join(",", list));31 32 //從後到前的排序(降序)33 for (int n = list.Count - i - 1; n >= i; n--)34 {35 //如果前面大於後面,則進行交換36 if (n > 0 && list[n - 1] > list[n])37 {38 var temp = list[n];39 40 list[n] = list[n - 1];41 42 list[n - 1] = temp;43 44 isSorted = true;45 }46 }47 48 //當不再有排序,提前退出49 if (!isSorted)50 break;51 52 Console.WriteLine("反向排序 => {0}", string.Join(",", list));53 }54 55 return list;56 }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2811508/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rust-algorithms:4-雞尾酒排序RustGo排序
- 輕鬆一刻:什麼是雞尾酒排序和地精排序?排序
- 資料結構&演算法實踐—雞尾酒排序資料結構演算法排序
- Mockito雞尾酒第一杯 單測MockMockito
- 經典演算法題每日演練——第二十三題 雞尾酒排序演算法排序
- 想喝雞尾酒不用去酒吧 有了B4RM4N智慧調酒器想喝就喝
- CVPR 2018 | 雞尾酒網路DCTN:源分佈結合律引導的遷移學習框架遷移學習框架
- 【工業智慧】用AI來做工業裝置的故障診斷,目前還停留在“雞尾酒療法”階段AI
- 業界 | 深度學習也能實現「雞尾酒會效應」:谷歌提出新型音訊-視覺語音分離模型深度學習谷歌音訊視覺模型
- 專訪中科雲創周北川:用AI來做工業裝置的故障診斷,目前還停留在“雞尾酒療法”階段AI
- P3809 【模版】字尾排序排序
- 洛谷P3809 【模板】字尾排序排序
- DreamJudge-1294-字尾子串排序排序
- 進口紅酒批發代理|廣州進口紅酒批發團購|紅酒加盟批發
- Python多執行緒雞年不雞肋Python執行緒
- 077、將進酒
- 酒廠酒業IP網路廣播系統建設-基於區域網的新一代互動智慧酒廠酒業IP網路廣播設計指南
- 中國酒業協會:2019中國酒業經濟執行報告
- 中國酒業協會:2021年中國酒業經濟執行報告
- 紅葡萄酒、白葡萄酒、乾紅、乾白、解百納的區別?
- 中國酒業協會:2023年酒業經濟執行報告
- 百雞問題擴充套件-N雞問題N元錢買N只雞,公雞每隻5元,母雞每隻3元,小雞1元3只,N元錢必須剛好買N只雞,而且雞必須整隻買,不能劈開買。套件
- 8.30 薊縣制酒廠
- 怎樣才能做釀酒遊戲設計師?真的釀酒,也真的在酒窖里長大遊戲設計師
- 中國酒業協會:2020年中國酒業經濟執行報告
- WineGo紅酒鏈遊模式開發系統搭建|酒鏈世界商城開發技術Go模式
- Python小菜雞求助Python
- Oracle OMF 為雞肋Oracle
- 菜譜-黃燜雞
- 酒館戰棋產品分析報告
- 程式設計師的酒後真言程式設計師
- 葡萄酒使用指南–資訊圖
- 當紅炸子雞圖資料庫商業化落地“雞肋”?資料庫
- 尾呼叫優化優化
- [GDC 2021]《Hundred Days》從葡萄酒產區誕生的釀酒模擬遊戲遊戲
- ?30 秒瞭解尾遞迴和尾遞迴優化遞迴優化
- python百雞百錢Python
- 雞肋的Redis事務Redis