排序4快速排序

来源:互联网 发布:联通机顶盒安装软件 编辑:程序博客网 时间:2024/05/21 06:36
快速排序思想是,利用递归将原问题划分为许多更小的问题,每次以处理区间的首个记录值为标准,将处理区间处理为(记录值左面值均小于(或大于)右面值均大于(或小于)记录值),这样当把原始区间划分为许多个只有一个值的子区间后 ,整个区间就有了顺序。

#include<iostream>
using namespace std;
#define MAX 255
int R[MAX];
int Partition(int i,int j)
{
 //对R[low...high]做划分,并返回基准记录位置
 int pivot=R[i];//用区间的第一个记录作为基准
 while(i<j)
 {
   while(i,j&&R[j] >= pivot)
     j--;//从右向左进行扫描,找到第一个关键字小于pviot.key的记录R[j];
   if(i<j)
    R[i++]=R[j];//相当于将R[j]值付给R[i]后,i指针加1;
   while(i<j && R[i] <= pivot)
    i++;//从左向右进行扫描,找到第一个关键字大于pvoit.key的记录R[i];
   if(i<j)
    R[j--]=R[i];//相当于将R[i]的值付给R[j]后,j指针减1;

 }//此循环结束后,以区间的第一个记录为基准,左面的值均小于他,右面的值均大于他
 R[i]=pivot;//基准记录被最后定位
 return i;
}
void Quick_Sort(int low,int high)
{
 int pivotpos;//划分后地基准记录位置
 if(low<high)
 {//当区间长度大于1时才需要排序

  pivotpos = Partition(low,high);//对R[low...high]做划分
  Quick_Sort(low,pivotpos-1);//対左区间进行递归排序
  Quick_Sort(pivotpos+1,high);//对右区间进行递归排序

 }
}
int main()
{
 int i,n;
 puts("Please input total element number of the sequence:");
 cin>>n;
 if(n <= 0 || n > MAX)
 {
  printf("n must more then 0 and less than %d.\n",MAX);
  exit(0);
 }
 puts("Please input the element one by one");
 for(i=1;i<=n;i++)
    {
      cin>>R[i];
 }
 puts("the sequence you input");
 for(i=1;i<=n;i++)
 {
  cout<<R[i]<<" ";
 }
 Quick_Sort(1,n);
 puts("\nThe sequence after quick_sort id :");
 for(i=1;i<=n;i++)
 {

  cout<<R[i]<<" ";
 }

 return 0;
}

原创粉丝点击