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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Sort
{
    class CockTailSorter
    {
        private static int[] myArray;
        private static int arraySize;
        public static int[] Sort(int[] myArray)
        {
            arraySize = myArray.Length;
            CockTailSort(myArray);
            return myArray;
        }
        public static void CockTailSort(int[] myArray)
        {
            int low, up, index, i;
            low = 0;//数组起始索引
            up = myArray.Length - 1;//数组索引最大值
            index = low;//临时变量
	   //判断数组中是否有多个元素
            while (up > low)//每一次进入while循环都会找出相应范围内最大最小的元素并分别放到相应的位置
            {
		//进入该for循环会将索引限定范围内最大的元素放到最右边
                for (i = low; i < up; i++)//从上向下扫描
                {
                    if (myArray[i] > myArray[i + 1])
                    {
                        Swap(ref myArray[i], ref myArray[i + 1]);
                        index = i;//记录当前索引
                    }
                }
                up = index;//记录最后一个交换的位置
		//进入该for循环会将索引限定范围内最小的元素放到最左边
                for (i = up; i > low; i--)//从最后一个交换位置从下往上扫描
                {
                    if (myArray[i] < myArray[i - 1])
                    {
                        Swap(ref myArray[i], ref myArray[i - 1]);
                        index = i;
                    }
                }
                low = index;//记录最后一个交换的位置
            }
        }
        private static void Swap(ref int left, ref int right)
        {
            int temp;
            temp = left;
            left = right;
            right = temp;
        }
    }
}

鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。

使用鸡尾酒排序,数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值