您的位置:首页 > 其它

递归快速排序

2010-06-23 13:48 225 查看
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
{
//右边递归到此结束
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: