北京做网站哪家便宜,网站导航栏的作用,网站seo优化合同,深圳网站开发公这篇我们来聊一下鸡尾酒排序#xff0c;为了知道为啥取名为鸡尾酒#xff0c;特意看了下百科#xff0c;见框框的话#xff0c;也只能勉强这么说了。要是文艺点的话#xff0c;可以说是搅拌排序#xff0c;通俗易懂点的话#xff0c;就叫“双向冒泡排序”#xff0c;我… 这篇我们来聊一下鸡尾酒排序为了知道为啥取名为鸡尾酒特意看了下百科见框框的话也只能勉强这么说了。要是文艺点的话可以说是搅拌排序通俗易懂点的话就叫“双向冒泡排序”我想作为码农的话不可能不知道冒泡排序冒泡是一个单向的从小到大或者从大到小的交换排序而鸡尾酒排序是双向的从一端进行从小到大排序从另一端进行从大到小排序。从图中可以看到第一次正向比较我们找到了最大值 9.第一次反向比较我们找到了最小值 1.第二次正向比较我们找到了次大值 8.第二次反向比较我们找到了次小值 2。。。最后就大功告成了。下面我们看看代码
namespace ConsoleApplication1
{class Program{static void Main(string[] args){Listint list new Listint() { 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 namelist/param/// returns/returnsstatic Listint CockTailSort(Listint 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 namelist/param/// returns/returnsstatic Listint CockTailSort(Listint 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;}
好了这样就比较完美了希望本篇对您有帮助。