快速排序(Quick Sort)—挖坑填数法

本文详细介绍了快速排序算法的工作原理,通过挖坑填数法演示了排序过程,强调了如何确定基准数、如何分区以及递归操作。以数组 [14, 18, 11, 30, 28, 4] 为例,逐步展示了排序步骤,阐述了快速排序的不稳定性,并提供了完整的代码实现。" 79582100,6676211,C语言中的字符串解析与注意事项,"['C语言', '字符串操作', '内存管理', '字符数组', '指针']

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

前面的博文讲了冒泡排序选择排序插入排序,今天我们谈谈快速排序!
快速排序的基本思想是:
1.先从序列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。(分区的方式多样,但一定要保证基准数左边的数比它大(小),右边的数比它小(大))
3.再对左右区间重复第一步、第二步,直到各区间只有一个数。

快速排序的关键点(一定要理解):
1、 如何确定基准数?
一般情况下,选取当前数组的第一个数。
2、如何找到比基准数大(小)的数?(假设从小到大排序)
先从后往前找比基准数小的数;再从前往后找比基准数大的数;(注意次序不能颠倒)
3、找到的数如何放,才能实现比基准数大和小的数分别在基准数的两边?
采用挖坑填数法,具体过程如下:
①每次把基准数所在的位置看成一个坑位A,定义两个变量:left和right分别指向数组的左端和右端。
②从后往前扫描数组,当发现有值小于基准值时,将当前值填到坑位A中,同时当前值所在的位置看成新的坑位B;
③从前往后扫描数组,当发现有值大于基准值,将当前值填到坑位B中,同时当前值所在的位置看成坑位A;
不停的重复第②~③步的操作,直到left>=right相遇,表示这一轮的内循环比较结束,
将基准值填到left(right)指向的坑位中,就完成了本轮的排序;
4、以基准值为分割点,将当前的数组为两个小的数组,依次从第1步递归循环操作;

为了便于学者深入理解,举例:[14, 18, 11, 30, 28,4 ]进行从小到大的排序

整个过程中涉及三个参数:当前基准数num,left,right; (left,right分别代表当前数组的左右端位置)
第1轮:基准数num=14

①交换前的数据:[14, 18, 11, 30, 28,4 ] 当前坑位[0],left=0,right=5

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值