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 鸡尾酒排序算法
/// <summary>
/// 鸡尾酒排序算法
/// </summary>
/// <param name="intArray">要排序的数组</param>
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 对指定数组使用鸡尾酒排序算法进行排序
/// <summary>
/// 对指定数组使用鸡尾酒排序算法进行排序
/// </summary>
/// <param name="intArr">要排序的一维数组</param>
static void Sort(int[] intArr)
{
intArray = intArr;//为数组赋值
CockSorts(intArray);//使用鸡尾酒算法进行排序
}
#endregion
static void Main(string[] args)
{
int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };//定义一个一维数组,并赋值
Sort(arr);//排序
for (int i = 0; i < arr.Length; i++)//循环遍历排序后的数组
{
Console.Write(arr[i] + " ");//逐个输出数组元素
}
Console.ReadLine();
}