一.快速排序的递归代码思路
1.关于递归和回溯(因为递归调用牵扯到了所以就稍微展开讲一下)
- 下面是快排应用最好的情况下的分析图
![这就是最好的情况下,递归调用的图](https://img-blog.csdnimg.cn/81cb3541945a4e38826137ce49a07603.png)
- 这里牵扯到了栈帧的开辟与回退和算法复杂度的问题,大家可以去看其他人的博客。这里就不再赘述
2.代码的实现,为何去定义一些变量以及函数的设计
#include<iostream>
using namespace std;
int partition(int*, int, int);
void quickSort(int*,int,int);
void show(int*,int);
int main(){
int arr[] = {9,8,7,6,5,4,3,2,1};
int size = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, size - 1);
show(arr,size);
}
int partition(int* arr, int left, int right){
int temp;
while(left<right){
temp=arr[left];
while(left<right&&arr[right]>temp){
right--;
}
arr[left]=arr[right];
while(left<right&&arr[left]<=temp){
left++;
}
arr[right]=arr[left];
}
arr[left]=temp;
return left;
}
void quickSort(int* arr,int left,int right){
int index = partition(arr,left,right);
if(index-left>=2){
quickSort(arr,left,index-1);
}
if(right-index>=2){
quickSort(arr,index+1,right);
}
}
void show(int* arr,int size){
for (int i = 0; i < size; ++i) {
cout<<arr[i]<<" ";
}
cout<<endl;
}