快速排序算法
基本思想:
1.选定 pivot 中心轴
2.将大于 pivot 的数字放在 pivot 的右边
3.将小于 pivot 的数字放在 pivot 的左边
4.分别对左右子序列重复前三步操作
代码实现:
//快排
void quickSort(vector<int>& nums,int left,int right){
if(left >= right){
//递归结束的条件:序列长度<=1,直接结束
return;
}
int i=left;//左指针初始位置
int j=right;//右指针初始位置
int pivot = nums[ left+(right - left)/2 ];//中心位置作为枢轴
while(i<j){
while( i<j && nums[i]<pivot){
//左指针 从左往右找到第一个大于 pivot 的位置i
i++;
}
while( i<j && nums[j]>pivot){
// 右指针 从右往左找到第一个小于 pivot 的位置j
j--;
}
if( i<=j ){
swap(nums[i],nums[j]);//交换元素
i++;
j--;
}
}
//temp位置已确定,递归快排基准数左右两边剩余的数
quickSort(nums,left , j );//递归调用左半部分
quickSort(nums, i , right);//递归调用右半部分
}