快速排序本质上就是两个指针交替进行以及基本的递归
大致思路:
1.我们需要选定一个中心点(pivot)
2.大于中心点的数字放在中心点的左边
3.小于中心点的数字放在中心点的右边
4.重复上述步骤直到排序结束
/*快速排序,传入数组arr,左指针left,右指针right*/
void quickSort(int *arr,int left,int right)
{
int pivot = arr[left];/*选取一个中心点,一般是最左边,也就是左指针的位置*/
wile(left<right){//左指针一定要保证在右指针左边
while(arr[right]>=pivot) right--;//右指针向左移动一格
//右指针所指向的数一定要大于等于中心点这样右指针才能向左移动,不然就是左指针的范围了,这个也很好理解
arr[left]=arr[right];//如果右指针所指向的数小于中心点,也就是不满足上面while()循环,那就将右指针指向的数放在左指针指向的位置
while(arr[left]<=pivot) left++;
/*左指针指向的值如果是小于中心点的话就将左指针向后移动一格*/
arr[right]=arr[left];//如果左指针指向的值大于中心点的话,就将左指针的值付给右指针
}
arr[left]=pivot;//不满足left<right的时候,也就是左右指针重合的时候就将中心点付给左指针指向的值
/*递归重复上述操作,进行排序*/
/*这里的right-1和right+1也许有人会不懂,我第一次看的时候就不太懂,其实很好理解,就是将原本的一大块内容拆分成了两小块,左边就相当于是[left,right-1],右边就相当于是[right+1,right]这两个区间,这里的right其实就是两个小块之间的分界点pivot*/
quickSort(arr,left,right-1);
quickSort(arr,right+1,right);
}