目录
上篇我们介绍了hoare基础版,但是这种代码存在缺陷,所以我们提出了两种解决方案。主流的解决方案就是【三数取中选key】
GitMidi三数取中
在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。在此我们采用三数取中法,也就是取左端、中间、右端三个数的下标,然后进行排序,将中间数作为枢纽值。
- 取的三个数的中位数的下标
- 取的是下标❗
- 数值两两比较
- 对快速排序的单趟的优化,三数取中是走快速排序逻辑(每趟的优化)
- 三数取中:取三个数中的中位数下标,选到合适的数,避免选取到最小的最大的数,对顺序结构的效率优化很好。
整体思想
- 设置三个值下标:begin // end // midi
- 两个两个比较
- 得到中位数的下标
图解分析
【顺序序列优化前:等差数列O(N^2)】
【顺序序列优化后:类似二叉树等比数列O(N*logN)】