一.快速排序
思想:
分治思想
步骤:
(1)设一个分界点:q[l], q[r], q[l+r>>1] 或随机一个数
(2) 调整区间(快排的重点)
(3)递归,左右两区间再排序
1.该分界点是待排序数组中的一个数。
2.调整区间:将数组中小于等于分界点的数都挪至在左侧位置,将大于等于分界点的数都挪至右侧位置。所以并不是以分界点x为一个位置,小于x的都在分界点左边,大于x的都在右边,因为左边有等于x的,右边也有等于x的。
3.就是细化,直到整个数组完全排好序
代码实现:
void quick_sort(int q[],int l,int r){
if(l>=r) return;//如果数组中没有或者只有一个数,就不用再排序
int breakpoint = q[l];//分界点
int i = l-1,j = r+1;/*两个指针,因为每执行一次比较,l,r都要移动一位。
所以干脆不管三七二十一上来就移动一位(后面用了do-while),然后再比较。
这样写就需要刚开始的时候,两个指针都在边缘外,移动一位后,刚好从边缘开始。
*/
while(i<j){
do i++;while(q[i]<breakpoint);
do j--;while(q[j