using System;
/// <summary>
/// 递归快速排序 的摘要说明。
/// </summary>
public class QuickSort
{
public static void Main()
{
int[] intary={45,67,34,23,12,89};
Console.WriteLine("排序前,输出数组如
下:");
printArray(intary);
quickSort(intary,0,intary.Length-1);
Console.WriteLine("快速排序之后,输出
数组如下:");
printArray(intary);
}
private static void printArray(int[] tmpary)
{
foreach(int tmpnum in tmpary)
{
Console.Write(tmpnum+"\t");
}
Console.WriteLine();
}
private static void quickSort(int[] ary, int start,
int end)
{
int i=start;
int j=end;
int pivot=ary[i];//把枢轴的数字独立存
起来
while(i<j)
{
while(i<j && pivot<=ary
[j])//从右边找寻比枢轴小的数字,找到后就换到左边枢轴位置去
{
j--;
}
ary[i]=ary[j];//将找到的较小
数字换到枢轴位置
while(i<j && pivot>ary[i])//
从左边找寻比枢轴大的数字,找到后就换到右边刚才那个大数字的位
置去
{
i++;
}
ary[j]=ary[i];//将找到的较大
数字换到刚才那个空位去
}
ary[i]=pivot;//i此时为分隔位置,所有i
左边的都比枢轴小,所有i右边的都比枢轴大,将枢轴填入此位置
ary[j] = pivot;
if (i > start)
{
quickSort(ary, start, i - 1);//使用快速排序法
递归重排枢轴左边比其小的全部数字
}
else
{
//左边递归到此结束
}
if (i < end)
{
quickSort(ary, i + 1, end);//使用快速排序法递
归重排枢轴右边比其大的全部数字
}
else
{
//右边递归到此结束
}
}
}