思路
单向扫描是第一个指针sp从左往右扫,遇到小的则下移一位,然后sp++,
遇到大的交换该值与第二个指针bigger的值,然后bigger–;
双向扫描分区法
- 设置两个扫描指针 sp 和 bigger,两个指针同时往中间扫;
- sp遇到比主元小的元素则移动到下一位,遇到比主元大的元素则暂停移动
- bigger遇到比主元大的元素则移动到前一位,遇到比主元小的元素则暂停移动
- sp和bigger都暂停后,交换两个指针所指向的值
- 主元的选取还是选取范围内的第一个元素
- 与单向扫描法一样,扫描结束时sp和bigger 指针会交错,sp指针指向第一个比主元大的元素,bigger指针指向最后一个比主元小的元素
PHP代码示例
1 | class quickSort { |
结果
1 | Array |