递归快速排序
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
{
//右边递归到此结束
}
}
}
/// <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
{
//右边递归到此结束
}
}
}
相关文章推荐
- 递归,汉诺塔,冒泡排序,选择排序,插入排序,快速排序
- 快速排序实现之递归与非递归
- 快速排序经典算法(分治法,挖坑法,前后指针法,非递归)
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序的三种实现方式以及非递归版本
- 快速排序解剖(递归)
- (转的!)快速排序的递归与非递归实现。
- 霍尔快速排序 非递归 C++实现
- 快速排序的递归实现
- [算法简结]递归分治(三):快速排序
- 快速排序 --递归调用一个函数初始值被写死
- 值类型、引用类型、连接池、递归、快速排序
- 快速排序的递归实现算法
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归算法
- 快速排序Java源码(递归和非递归)
- Erlang的算法-(一)递归快速排序和MapReduce分布式的快排
- 快速排序 递归
- 快速排序的递归和非递归实现 -----C++、JAVA代码实现