/* 快速排序由C. A. R.Hoare在1962年提出,是对冒泡排序的一种改进。
* 它的基本思想是:
* 通过一趟排序将要排序的数据分割成独立的两部分
* ,其中一部分的所有数据都比另外一部分的所有数据都要小
* ,然后再按此方法对这两部分数据分别进*/
#include<stdio.h>
#define N 30
int QSort(int a[N],int l,int r)
{
int m,i,j,p;
if(l>=r)return 0; /*递归出口,当序列长度小于等于0时,视为排序结束*/
i=l;j=r;
p=a[l]; /*取a[l]为基准元素*/
while(i<j)
{
while(a[j]>=p&&j>i) /*从a[j]往后搜索,将比基准元素p大的元素找出来*/
j--;
if(i<j)
a[i]=a[j]; /*将找出来的元素放进序列左边,将序列右边挖坑*/
while(a[i]<p&&i<j) /*从a[i]往后搜索,将比基准元素p小的元素找出来*/
i++;
if(i<j)
a[j]=a[i]; /*将找出来的元素放进序列右边,将序列左边挖坑*/
}
a[i]=p; /*划分结束,将标准元素填入最后一个坑*/
QSort(a,l,j-1); /*递归调用,将序列分成两段*/
QSort(a,j+1,r);
}
void main()
{
int i,n;
int a[N]={0};
printf("请输入序列长度:");
scanf("%d",&n);
printf("请输入该序列:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
QSort(a,0,n-1);
printf("排序之后是:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}