5
社区成员
发帖
与我相关
我的任务
分享
![]()


int Partition(int a[],int low,int high){//划分函数
int i=low,j=high,pivot=a[low];//取数组首元素为基准元素
while(i<j){//当i>=j时不再划分
while(i<j&&a[j]>pivot) j--;//向左扫描
//扫描停止条件i>j或者a[j]大于基准数
if(i<j){//如果a[j]<pivot
swap(a[i],a[j]);//交换a[i]和a[j]保证pivot右边元素永远比左边大
i++;//交换完,i向后移动
}
while(i<j&&a[i]<pivot) i++;//向右扫描,如果a[i]>pivot跳出循环
if(i<j){//如果a[i]>pivot
swap(a[i],a[j]);//交换a[i]和a[j]保证pivot左边元素永远比右边小
j--;//交换完,j向前移动
}
}
return i;//返回最终划分完成后基准元素所在的位置(i=j)
}

void quickSort(int a[],int low,int high){
int mid;
if(low<high){
mid=Partition(a,low,high);//返回基准元素位置
quickSort(a,low,mid-1);//左区间递归快速排序
quickSort(a,mid+1,high);//右区间递归快速排序
}
}
#include<iostream>
using namespace std;
int Partition(int a[],int low,int high){//划分函数
int i=low,j=high,pivot=a[low];//取数组首元素为基准元素
while(i<j){//当i>=j时不再划分
while(i<j&&a[j]>pivot) j--;//向左扫描
//扫描停止条件i>j或者a[j]大于基准数
if(i<j){//如果a[j]<pivot
swap(a[i],a[j]);//交换a[i]和a[j]保证pivot右边元素永远比左边大
i++;//交换完,i向后移动
}
while(i<j&&a[i]<pivot) i++;//向右扫描,如果a[i]>pivot跳出循环
if(i<j){//如果a[i]>pivot
swap(a[i],a[j]);//交换a[i]和a[j]保证pivot左边元素永远比右边小
j--;//交换完,j向前移动
}
}
return i;//返回最终划分完成后基准元素所在的位置(i=j)
}
void quickSort(int a[],int low,int high){
int mid;
if(low<high){
mid=Partition(a,low,high);//返回基准元素位置
quickSort(a,low,mid-1);//左区间递归快速排序
quickSort(a,mid+1,high);//右区间递归快速排序
}
}
int main(){
int n;
int *a=new int[n];
cout<<"请输入元素个数:"<<endl;
cin>>n;
cout<<"请输入各元素值:"<<endl;
for(int i=0;i<n;i++){
cin>>a[i];
}
//分治算法
quickSort(a,0,n-1);
cout<<"输出排序结果为:"<<endl;
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
输出样例:


