快速排序是什么就不介绍了,一般可以使用STL里的sort函数,以下给出两种自定义快速排序方法。
1、快速排序(需要临时空间)
#include<cstdio>
void QuickSort(int *a,int n)
{
if(n<=1)
return;
int *left=new int[n];
int *right=new int[n];
int nl=0,nr=0;
int x=a[n-1];
for(int i=0;i<n-1;i++)
{
if(a[i]<=x)
left[nl++]=a[i];
else
right[nr++]=a[i];
}
QuickSort(left,nl);
QuickSort(right,nr);
int k=0;
for(int i=0;i<nl;i++)
a[k++]=left[i];
a[k++]=x;
for(int i=0;i<nr;i++)
a[k++]=right[i];
delete[] left;
delete[] right;
}
int main()
{
int n;
int a[10000];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
QuickSort(a,n);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
2、快速排序(不需要临时空间)
#include<cstdio>
void QuickSort(int *a,int l,int r)
{
int i,j,mid,p;
i=l;j=r;
mid=a[(l+r)/2];
do
{
while(a[i]<mid)
i++;
while(a[j]>mid)
j--;
if(i<=j)
{
p=a[i];
a[i]=a[j];
a[j]=p;
i++;
j--;
}
}while(i<=j);
if(l<j)
QuickSort(a,l,j);
if(i<r)
QuickSort(a,i,r);
}
int main()
{
int n;
int a[10000];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
QuickSort(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}