排序算法之鸡尾酒排序
鸡尾酒排序算法也称双向冒泡排序、搅拌排序或涟漪排序。
class Program { static void Main(string[] args) { #region 鸡尾酒排序算法 int[] array = new int[] { 3, 6, 9, 52, 41, 25, 78, 5, 45, 48, 74, 45, 51, 524, 74, 2 };//定义一个一维数组并赋值 Sort(array);//排序 for (int i = 0; i < array.Length; i++)//循环遍历排序后的数组 { Console.Write(array[i]+" ");//逐个输出数组元素 } #endregion Console.ReadKey(); } static int[] intArray; #region 两个数位置变换 /// <summary> /// /// </summary> /// <param name="left"></param> /// <param name="right"></param> static void Change(ref int left, ref int right) { int temp;//临时变量 temp = left;//记录第一个数的值 left = right;//使第一个数的值等于第二个数的值 right = temp;//使第二个数的值等于临时变量的值 } #endregion #region 鸡尾酒排序算法 static void CockSorts(int[] intArray) { int low, up, index;//定义变量 low = 0;//数组的开始索引 up = intArray.Length - 1;//数组的结束索引 index = low;//临时变量 while (up > low)//判断数组中是否存在多个元素 { for (int i = low; i < up; i++)//从上向下扫描 { if (intArray[i] > intArray[i + 1])//比较前后两个数大小 { Change(ref intArray[i], ref intArray[i + 1]);//变换两个数的位置 index = i;//记录当前索引 } } up = index; for (int i = up; i > low; i--)//记录最后一个交换的位置 { if (intArray[i] < intArray[i - 1]) { Change(ref intArray[i], ref intArray[i - 1]);//变换两个数的位置 index = i; } } low = index; } } #endregion #region 对指定数组使用鸡尾酒算法进行排序 static void Sort(int[] intArr) { intArray = intArr;//未数组赋值 CockSorts(intArray);//使用鸡尾酒算法对数组进行排序 } #endregion }