思路:通过确定分界点+左右伪指针调整区间+分治思想来进行排序。
函数代码:
void quick_sort(int q[], int l , int r){
if(l>=r) return;
int i=l-1,j=r+1,x=q[(l+r)>>1];
while(i<j){ //i,j指向数组元素位置;
do i++; while(q[i]<x); //左伪指针指向不小于x的数
do j++; while(q[j]>x); //右伪指针指向不大于x的数
if(i<j){ //交换左右指针的值
int temp=q[i];
int q[i]=q[j];
int q[j]=temp;
}
}
quick_sort(q,l,j),quick_sort(q,j+1,r); //分治递归排序剩下的部分
}
tips:忘记指针调整的时候,可以直接开辟两个数组A,B;通过一次扫描判断,把小于分界点x的数放到A,大于x的数放到B,最后再把A,B合并起来。