本节内容为部分排序和查找算法,数据结构课讲过,不过当时期末时间紧,没去听课,虽然PPT看懂了,但是从没有自己完整敲过,现在原理也都忘了,学一遍发现确实有些地方容易写错。
快速排序
核心思路
主要思想:分治
- 确定分界点:
q[l]或者q[(l+r)/2]或者q[r]; - 调整范围:目标是左边的数都小于等于x,右边的数都大于等于x(分界点不一定是x);
- 递归处理左右两端
第2步实现
暴力算法
- 开两个数组a[ ]和b[ ];
把q[ ]中从l到r遍历:
- q[i]<=x 放入a;
- q[i]>x 放入b;
- 把a[ ]和b[ ]放入q[ ]中
常用思路
设定两个指针,从左右两端开始:
- 左指针从左向右寻找第一个大于等于基准的元素
- 右指针从右向左寻找第一个小于等于基准的元素
- 找到之后交换两个元素
持续移动左右指针并交换元素,直到两个指针相遇,此时结束