快速排序

本文详细解析了快速排序算法的工作原理,并提供了C++代码实现,重点讨论了递归过程和边界条件的选择。通过这个实例,读者将理解如何选择基准元素、分区操作和递归调用以达到高效排序。

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

快速排序实现

#include <bits/stdc++.h>
using namespace std;

#define MAX 1e6+10;
int nArr[MAX];
int nNum;


void QuickSort(int *p, int nLeft, int nRight)
{
	if(nLeft >= nRight)//当只有一个元素或没有元素时 直接返回
	{
		return;
	}
	
	//i j 指向的位置写法与下面while循环中的写法有关 
	//是为了每次执行完swap操作后 能够自动指向下一次的边界
	int i = nLeft - 1;
	int j = nRight + 1;
	//选取数组中间的那个数字 作为对照
	int nTemp = nArr[(nRight - nLeft)/2 + nLeft];

	while(i < j)
	{
		//先i++  
		do i++; while(nArr[i] < nTemp);
		//先j--
		do j--; while(nArr[j] > nTemp);
		if(i < j) swap(nArr[i], nArr[j]);
		//为什么要先i++ j-- 就是在执行完swap之后 要向中间移动
	} 

	//递归处理左右 
	//这里为什么边界是j呢?换成i行不行 留给大家思考吧!
	QuickSort(p, nLeft, j);
	QuickSort(p, j+1, nRight);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值