C++快速排序快排思想及代码

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都说快排是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]左边)*/
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值