基础算法系列之排序算法-5. 快速排序

本文介绍了快速排序算法,通过一次元素交换消除多个逆序以提高排序效率。详细阐述了快速排序的算法思想、实现过程,并以数列[49,38,65,97,76,13,27,49]为例进行演示。同时,结合HDU 1157 'Who's in the Middle'问题,展示了如何利用快速排序寻找奶牛产奶的中位数。" 118358028,7802673,Java实现独立事务处理,"['java', '事务管理', '接口编程', '异常处理']

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

我们之前学习了冒泡排序算法,我们知道,在冒泡排序过程中,只对相邻的两个元素进行比较,因此每次交换两个相邻的元素时只能消除一个逆序。如果能通过两个(不相邻)元素的一次交换,消除多个逆序,则会大大加快排序的速度。而这就是本篇文章讲述的另一种基本排序算法——快速排序算法。


快速排序

 快速排序是通过冒泡排序改进得来的,冒泡排序每次元素的交换只能消除一个逆序,而快速排序的一次元素交换可以消除多个逆序,从而大大提高排序的效率。


快速排序的算法思想

 通过一次元素的交换消除多个逆序,以提高排序的效率。


快速排序的实现过程

     在待排序的n个元素中任取一个元素(通常取第一个元素)作为枢轴,记录它在序列中位置为pivotkey,记录待排序元素的第一个元素的位置为low,最后一个元素的位置为high。通过一次排序之后,比枢轴小的元素全部排列在起左侧,比枢轴大的元素全部在其右侧,然后通过枢轴作为分界线,将原数列一分为二(一个子列从low到pivotkey-1,另一个子列从pivotkey+1到high),对两个新生成的子列重复上述过程,直到所有新生成的子列只有一个元素,则排序完成。

 

   是不是有点抽象,有点难理解,没事~我们举个例子,来演示一下这个过程。

 

   例如:我们要对数列[49,38,65,97,76,13,27,49]进行快速排序。则记录low与pivotkey为0(数组的第一元素位置),high为7(数组的最后一个元素位置),我们从数列最"右"侧(a[high])开始,逐个与枢轴处的值(即a[pivotkey],在这个例子中为49,已用红色标明)进行比较,若元素的值大于等于枢轴值(49),则high自减(high--)。直到将第一个比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值