快速排序 - 算法学习

49 阅读1分钟

描述:将数组的数按升序排序,比如:[0,3,2,7,1,8] -> [0,1,2,3,7,8]

解法:快速排序,切分小单元,分而治之

  1. 任意选取一个数值作为基准值,一般选数组第一个值,记录其下标k
  2. 定义2个指针,low和high, 其值等于数组开始下标start,结束下标end
  3. low指针读取从低位到高位读,如果值小于基准值,则low++,如果值大于基准值,则记录当前low值
  4. high指针读取从高位到低位读,如果值大于基准值,则high--,如果值小于基准值,则记录当前high值
  5. 当low < high,则交换low和high下标的数值
  6. 当low >= high,low和high指针相遇(相等),则将基准位k与高位high的值互换
  7. 拆分小数组,递归排序(start, low-1), (high+1, end)
  8. 结束排序

总结:选择基准值,让左边所有数值小于基准,右边所有数值大于基准

参考资料

Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》