快速排序QuickSort

本文介绍了一种高效的排序算法——快速排序的基本思想与递归过程。快速排序通过选取分界值并以此为基准对数组进行划分,使得左侧元素都不大于分界值而右侧元素都不小于分界值,再对左右两侧子数组递归执行相同操作。

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

快速排序是一种分治算法,即通过递归,不断减少每一次要处理的数组元素,并找到分界元素的位置,具体地:

1)给定一个大小为n的数组A[n];

2)以数组中第一个元素,即A[0]=x作为第一次分界值,将A[n]中剩余的其它元素,按照“比x小或者相等的元素放在x的左边,比x大的元素放在x右边”的规则,重新排列数组,假设为B[n],并返回一个数值q,表示x在重新排列后数组的位置;具体的,可以使用使用Partition函数实现,传入数组A及其首尾位置l和r作为参数,返回q;

3)得到位置q后,即可以将新的数组B[n]分成两部分,一部分是从B[0]到B[q-1]的数组B1,另一部分是从B[q+1]到B[n-1]的数组B2;分别对B1和B2重复进行上述操作,递归直到数组的元素不能再分为止;

这里只是大概讲一下快排的思想,没有涉及过多的实现,主要想说明为什么通过这样的递归操作,最后能实现数组的排序:我们发现,每一个求新数组的首位元素的正确位置q之后,我们会把首元素x和位置q上的元素对调,即把x放到了最终结果的相应位置上去了,其它元素的位置没有确定,但被正确地分开在了大于x和小于等于x的两边。所以子数组是不包括位置q的(从q-1和q+1可以看出);每一次对子数组进行划分的时候,都会把子数组的首元素放在最终结果的相应位置上去;最后剩下一个元素的时候,该位置自然也就是最终结果的位置了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值