都说快排是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]左边)*/
i++,j--;
}
}while(i<=j);
if(l<j)st(l,j);//递归左边
if(i<r)st(i,r);//递归右边
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
st(1,n);
cout<<a[1];
for(int i

本文介绍了C++中的快速排序算法,强调了虽然有sort函数可用,但学习快速排序仍然很重要。文中探讨了算法优化点,并给出了算法的实现代码。通过简单的图表解释了快速排序的递归过程。
最低0.47元/天 解锁文章
1476

被折叠的 条评论
为什么被折叠?



