描述:将数组的数按升序排序,比如:[0,3,2,7,1,8] -> [0,1,2,3,7,8]
解法:快速排序,切分小单元,分而治之
- 任意选取一个数值作为基准值,一般选数组第一个值,记录其下标k
- 定义2个指针,low和high, 其值等于数组开始下标start,结束下标end
- low指针读取从低位到高位读,如果值小于基准值,则low++,如果值大于基准值,则记录当前low值
- high指针读取从高位到低位读,如果值大于基准值,则high--,如果值小于基准值,则记录当前high值
- 当low < high,则交换low和high下标的数值
- 当low >= high,low和high指针相遇(相等),则将基准位k与高位high的值互换
- 拆分小数组,递归排序(start, low-1), (high+1, end)
- 结束排序
总结:选择基准值,让左边所有数值小于基准,右边所有数值大于基准
参考资料
Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》