递归快速排序


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
            {
                //右边递归到此结束
            }
  }
 }

原文地址:https://www.cnblogs.com/jasonjiang/p/1763541.html