首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
V2EX
›
deagleWSJ
›
全部回复第 1 页 / 共 1 页
回复总数
2
316 天前
回复了
samhjn
创建的主题
›
程序员
›
考考大家,华为云公众号里展示的这个快排程序哪里错了
@
billccn
交换 arr[i], arr[j]后下一次循环会进入 while(arr[i] < pivot) i++。真正的问题对于含有重复元素的数组排序,当 arr[i]和 arr[j]都等于 pivot 时会死循环。
316 天前
回复了
samhjn
创建的主题
›
程序员
›
考考大家,华为云公众号里展示的这个快排程序哪里错了
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
·
实用小工具
·
2633 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms ·
UTC 03:04
·
PVG 11:04
·
LAX 19:04
·
JFK 22:04
Developed with
CodeLauncher
♥ Do have faith in what you're doing.