#include<iostream>
using namespace std;
int partition(int r[],int low,int high)//划分函数
{
int i=low,j=high,pivot=r[low];//基准元素
while(i<j)
{
while(i<j&&r[j]>pivot)j--;//向左扫描
if(i<j) swap(r[i++],r[j]);//r[i]和r[j]交换,i++,右移一位
while(i<j&&r[i]<=pivot)i++;//向右扫描
if(i<j) swap(r[i],r[j--]);//r[i]和r[j]交换,j--,左移一位
}
return i;//返回基准元素位置
}
void quicksort(int r[],int low,int high)//快速排序
{
if(low<high)
{
int mid=partition(r,low,high);
quicksort(r,low,mid-1);//左区间递归快速排序
quicksort(r,mid+1,high);//右区间递归快速排序
}
}
int main()
{
int low=0,high,n;
cin>>n;
high=n-1;
int *r=new int[n];//动态定义数组
for(int i=0;i<n;i++)
cin>>r[i];//随机输数
quicksort(r,low,high);
for(int i=0;i<n;i++)
cout<<" "<<r[i];
}
优化:
将调用函数替换成以下
int partition(int r[],int low,int high)//划分函数
{
int i=low,j=high,pivot=r[low];//基准元素
while(i<j)
{
while(i<j&&r[j]>pivot)j--;//向左扫描
while(i<j&&r[i]<=pivot)i++;//向右扫描
if(i<j) swap(r[i++],r[j--]);//r[i]和r[j]交换
}
if(r[i]>pivot)
{
swap(r[i-1],r[low]);
return i-1;//返回基准元素位置
}
swap(r[i],r[low]);//r[i]和r[j]交换
return i;//返回基准元素位置
}