算法学习——快速排序

快速排序(分治算法)
const int n = 1e6 + 10;
int a[N];
//a[]:待排序数组,L:排序数组的起始下标,R:排序数组的结束下标
void  quick_sort(int a[],int L,int R){
    if(l >= r){return;}    //递归的终止条件
    int x = a[l];        //选取排序的比较对象
    int i = L - 1;        //设置排序的左指针
    int j = R + 1;        //设置排序的右指针
    while(i<j){        //只要左右指针没相遇就循环进行
        do i++; while( a[i]<x );    //左指针向右寻找
        do j--; while( a[j]>x );    //右指针向左寻找
        if(i<j){swap(a[i],a[j]); }    //如果找到了就交换两个位置的变量
    }
    quick_sort(a,L,j);     //递归左区间
    quick_sort(a,j+1,R)     //递归右区间
}

int main(){
    int n;
    int a[10010];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    quick(a,0,n-1);
    for(int i=0;i<n;i++){
        cout<<a[i]<<” ”;
    }
    cout<<endl;
}

猜你喜欢

转载自www.cnblogs.com/Flydoggie/p/12196165.html