思路:
在当前数组中选定一个参照值x,移动数组元素使得x左边数的都小于等于x,x右边的都大于等于x,再对分出的两个小区间进行同样的操作,这样使得在每相邻两个区间里的数都有绝对的大小关系,直到最后每个区间都只剩下一个元素,排序结束。
实现:
选定参照值:
int x=q[l];
移动数组元素:
基于以下思路:
- 使用两个指针指向数组开头的两个元素
int i=l-1,j=r+1;//这里向外移一位后面有解释
- 将指针指向的值与x比较,满足要求则指针向中间偏移,不满足要求则指针不动
while(q[++i]<x);
while(q[--j]>y);
- 两指针都停下之后,如果指针i在j前面就交换两指针指向的值
if(i<j)
swap(q[i],q[j]);
- 继续比较,整合到一起就是
int x=q[l],i=