鸡尾酒排序Cocktail sort

Posted 一夜飘零

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鸡尾酒排序Cocktail sort相关的知识,希望对你有一定的参考价值。

鸡尾酒排序基于冒泡排序,双向循环

还是看例子吧,给定待排数组[2 3 4 5 1]

第一趟过去时的每一步

第一步迭代,2 < 3不换

[2 3 4 5 1]

 

第二步迭代,3 < 4不换

[2 3 4 5 1]

 

第三步迭代,4 < 5不换

[2 3 4 5 1]

 

第四步迭代,5 > 1交换

[2 3 4 1 5]

 

第一趟回来时的第一步,鸡尾酒一次到头后就回返回来,再到头后再过去,来回比,一个来回能排两个数字

第五步迭代,1 < 5不交换

[2 3 4 1 5]

 

第六步迭代,1 < 4交换

[2 3 1 4 5]

 

第七步迭代,1 < 3交换

[2 1 3 4 5]

 

第八步迭代,2 > 1交换

[1 2 3 4 5]

 

排序完毕,顺序输出结果即可得[ 1 2 3 4 5]

 

如何判断排序结束了?

假如一趟来回没有交换任何数字,则表示该数组已经有序了,可以设置了个变量表示有没有交换过

static void cocktail_sort(int[] unsorted)
        {
            bool swapped = false;
            do
            {
                for (int i = 0; i < unsorted.Length - 1; i++)
                {
                    if (unsorted[i] > unsorted[i + 1])
                    {
                        int temp = unsorted[i];
                        unsorted[i] = unsorted[i + 1];
                        unsorted[i + 1] = temp;
                        swapped = true;
                    }
                }

                swapped = false;
                for (int j = unsorted.Length; j > 1; j--)
                {
                    if (unsorted[j] < unsorted[j - 1])
                    {
                        int temp = unsorted[j];
                        unsorted[j] = unsorted[j - 1];
                        unsorted[j - 1] = temp;
                        swapped = true;
                    }
                }
            } while (swapped);
        }


        static void Main(string[] args)
        {
            int[] x = { 6, 2, 4, 1, 5, 9 };
            selection_sort(x);
            foreach (var item in x)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

  

以上是关于鸡尾酒排序Cocktail sort的主要内容,如果未能解决你的问题,请参考以下文章

“ 鸡尾酒会问题”(cocktail party problem)

走进Cocktail的魅惑世界,在HIVE 104 CLUB享受高品质与高颜值的完美碰撞 | 内含福利

算法----鸡尾酒排序

冒泡排序和鸡尾酒排序(code)

鸡尾酒排序(双冒泡排序搅拌排序或涟漪排序)

鸡尾酒排序