代码
#include<iostream>
using namespace std;
#define MAX 1000
int arr[MAX];
int n;//排序的个数
void quickSort(int left,int right) {
if(left>right){//递归出口
return ;
}
int i,j,temp;
i=left;
j=right;
temp=arr[left];//基准数的值为 temp
while(i!=j){
//先从右边往左边找小于基准数的
while(arr[j]>=temp&&i<j){
j--;
}
//再从左边往右边找大于基准数的
while(arr[i]<=temp&&i<j){
i++;
}
//如果还没有相遇,则进行交换
if(i<j){
int t;
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
//相遇了,基准数归位
arr[left]=arr[i];
arr[i]=temp;
quickSort(left,i-1);//递归处理左边的
quickSort(i+1,right);//递归处理右边的
}
int main() {
int data;
cin>>n;
for(int i=0; i<n; i++) {//输入待排序的数据
cin>>data;
arr[i]=data;
}
quickSort(0,n-1);//开始排序
for(int i=0; i<n; i++) {//输出排序后结果
cout<<arr[i]<<" ";
}
return 0;
}
递归出口千万不能写成这样
if(left==right){//把>改成了相等
return ;
}
比如当你在递归quickSort(0,1)的时候,他递归的下一层会出事
quickSort(0,1);
...
//省略中间逻辑
...
quickSort(0,0);
quickSort(2,1);//left=2,right=1,这个递归就出问题了