快速排序

785. 快速排序 - AcWing题库

l + r >> 1的值一定是小于r的,不会取到r。l<r, l+r<2r, (l+r>>1)<(2r>>1), (l+r>>1)<r

而l + r + 1 >> 1的值一定是大于l的,不会取到l。证明类比于上面

>>右移1位,等同于/2

主要注意越界问题

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=1e6+10;
int q[N],n;
void quickSort(int q[],int l,int r){
    if(l>=r) return;
    int x=q[l+r>>1],i=l-1,j=r+1;
    while(i<j){
        while(q[++i]<x);
        while(q[--j]>x);
        if(i<j) swap(q[i],q[j]);
    }
    quickSort(q,l,j);
    quickSort(q,j+1,r);
}
int main(){
    cin>>n;
    rep(i,0,n-1) cin>>q[i];
    quickSort(q,0,n-1);
    rep(i,0,n-1) cout<<q[i]<<' ';
    return 0; 
}

 

posted @ 2021-07-12 19:10  infocodez  阅读(130)  评论(0编辑  收藏  举报