deagleWSJ 最近的时间轴更新
deagleWSJ

deagleWSJ

V2EX 第 498850 号会员,加入于 2020-07-13 03:47:04 +08:00
deagleWSJ 最近回复了
@billccn 交换 arr[i], arr[j]后下一次循环会进入 while(arr[i] < pivot) i++。真正的问题对于含有重复元素的数组排序,当 arr[i]和 arr[j]都等于 pivot 时会死循环。
1. 当数组存在重复元素时,可能会导致死循环。修改:i++和 j--循环条件判断改为<=
2. i 初始从 left 开始,且 pivot=arr[left],会导致每次循环 i 和 j 总会有一个不动,pivot 值在 i 和 j 间换来换去。修改:i 从 left+1 开始,最后把 pivot 换到中间。
3. pivot 直接取 left 值,对于接近倒序的的数组性能较差。修改:left~right 间的随机位置作为 pivot ,并换到 left
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2734 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 11:39 · PVG 19:39 · LAX 03:39 · JFK 06:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.