关键词:
- p: 主元
- scan_pos: 扫描指针
- bigger: 右侧指针
思路
- 用两个指针将数组划分为三个区间,
- 扫描指针(scan_pos)左边是确认小于等于主元的,扫描指针到某个指针(next_bigger_pos)中间为未知的,因此我们将第二个指针(next_bigger_pos)成为位未知区间末指针,末指针的右边区间为确认大于主元的元素。
结构图
边界分析
- <= sp 右移,> 交换,bigger左移
- 如果最后一个元素大于主元,bigger左移之后小于scanner
- 如果最后一个扫描元素小于主元,scanner的右移导致,scanner大于bigger
PHP代码示例
1 | class quickSort { |
结果
1 | Array |
流程分析
- 主元 >= sp,sp右移
- 主元 < sp,sp和bigger交换,bigger左移