一、基本思想
1、选定一个中心轴(一般选取第一个数字作为中心轴),将要排序的数据分为两个部分
2、将大于中心轴的数字放在中心轴的右边
3、将小于中心轴的数字放在中心轴的左边
4、分别对左右子序列重复前三步的操作,直至排序完成
二、快速排序代码分析
#include <iostream>
using namespace std;
void quicksort(int *arry,int L,int R);
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin >>a[i];
}
quicksort(a,0,n-1);
for(int i=0;i<n;i++){
cout<< a[i]<<" ";
}
return 0;
}
void quicksort(int *arry,int L,int R)
{
if(L>=R){
return ;
}
int pivot=arry[L];//选定数组的第一个数字作为中心轴
int left=L,right=R;
while(left<right){
//右边的数字大于中心轴,right左移
while(left<right&&arry[right]>=pivot){
right--;
}
//将右边小于中心轴的数字放于中心轴右边
if(left<right){
arry[left]=arry[right];
}
//左边的数字小于中心轴,left右移
while(left<right&&arry[left]<=pivot){
left++;
}
//将左边大于中心轴的数字放于中心轴的右边
if(left<right){
arry[right]=arry[left];
}
//当游标left等于right时,一轮排序结束,将中心轴置于left位置
if(left>=right){
arry[left]=pivot;
}
}
//递归处理右边的无序数组
quicksort(arry,L,right-1);
//递归处理左边的无序数组
quicksort(arry,right+1,R);
}