都说快排是C++的基础算法,虽然sort函数也能做到,但是我们还是需要学习一下
思想:
快速排序利用了中间数的思想,也就是说,以中间数为基准,左右比较,如果满足条件两个数交换
这个算法优化在哪里?
这个算法不像冒泡排序要逐个比较,这个算法是有规律地比较
这个算法推荐使用什么方式写?
递归
附上图片:
用画图画的,思想比较简单,所以没搞多高级的图。这个图展示的是第一次递归做的事,蓝线表示交换,l,r,mid都在图中标出了,这里注意:mid=a[(l+r)/2],是无论奇偶的
代码附上:
#include<bits/stdc++.h>
using namespace std;
int a[1000001];
void st(int l,int r){
int mid=a[(l+r)/2];
int i=l,j=r;
do{
while(a[i]<mid)i++;
while(a[j]>mid)j--;
/*这里是找左边第一个比mid大的值和右边第一个比mid小的值*/
if(i<=j){
swap(a[i],a[j]);
/*如果满足要求(a[i]在a[j]左边)*/