日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构与算法专题——第九题 鸡尾酒排序

發布時間:2023/12/4 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法专题——第九题 鸡尾酒排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

要是文藝點的話,可以說是攪拌排序,通俗易懂點的話,就叫“雙向冒泡排序”,我想作為碼農的話,不可能不知道冒泡排序,冒泡是一個單向的從小到大或者從大到小的交換排序,而雞尾酒排序是雙向的,從一端進行從小到大排序,從另一端進行從大到小排序。

從圖中可以看到:

  • 第一次正向比較,我們找到了最大值 9.

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

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

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

  • 。。。

  • 最后就大功告成了。

下面我們看看代碼:

namespace ConsoleApplication1 {class Program{static void Main(string[] args){List<int> list = new List<int>() { 8, 1, 4, 2, 9, 5, 3 };Console.WriteLine("\n排序前 => {0}\n", string.Join(",", list));list = CockTailSort(list);Console.WriteLine("\n排序后 => {0}\n", string.Join(",", list));Console.Read();}/// <summary>/// 雞尾酒排序/// </summary>/// <param name="list"></param>/// <returns></returns>static List<int> CockTailSort(List<int> list){//因為是雙向比較,所以比較次數為原來數組的1/2次即可。for (int i = 1; i <= list.Count / 2; i++){//從前到后的排序 (升序)for (int m = i - 1; m <= list.Count - i; m++){//如果前面大于后面,則進行交換if (m + 1 < list.Count && list[m] > list[m + 1]){var temp = list[m];list[m] = list[m + 1];list[m + 1] = temp;}}Console.WriteLine("正向排序 => {0}", string.Join(",", list));//從后到前的排序(降序)for (int n = list.Count - i - 1; n >= i; n--){//如果前面大于后面,則進行交換if (n > 0 && list[n - 1] > list[n]){var temp = list[n];list[n] = list[n - 1];list[n - 1] = temp;}}Console.WriteLine("反向排序 => {0}", string.Join(",", list));}return list;}} }

從結果上面看,我們會發現,當數組有序的時候,我們還會繼續往下排,直到完成?length/2?次,這個就跟沒優化之前的冒泡排序一樣,此時我們可以加上一個標志位IsSorted 來判斷是否已經沒有交換了,如果沒有,提前退出循環。。。

/// <summary>/// 雞尾酒排序/// </summary>/// <param name="list"></param>/// <returns></returns>static List<int> CockTailSort(List<int> list){//判斷是否已經排序了var isSorted = false;//因為是雙向比較,所以比較次數為原來數組的1/2次即可。for (int i = 1; i <= list.Count / 2; i++){//從前到后的排序 (升序)for (int m = i - 1; m <= list.Count - i; m++){//如果前面大于后面,則進行交換if (m + 1 < list.Count && list[m] > list[m + 1]){var temp = list[m];list[m] = list[m + 1];list[m + 1] = temp;isSorted = true;}}Console.WriteLine("正向排序 => {0}", string.Join(",", list));//從后到前的排序(降序)for (int n = list.Count - i - 1; n >= i; n--){//如果前面大于后面,則進行交換if (n > 0 && list[n - 1] > list[n]){var temp = list[n];list[n] = list[n - 1];list[n - 1] = temp;isSorted = true;}}//當不再有排序,提前退出if (!isSorted)break;Console.WriteLine("反向排序 => {0}", string.Join(",", list));}return list;}

好了,這樣就比較完美了,希望本篇對您有幫助。

總結

以上是生活随笔為你收集整理的数据结构与算法专题——第九题 鸡尾酒排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。