基础算法学习---quick_sort && merge_sort

quick_sort模板

void quick_sort(int q[] ,int l ,int r){
    //不满足条件直接返回
    if( l >= r ) return;
    //建议取l + r >> 1,避免边界问题
    int x = q[l + r >> 1],i = l -1,j = r + 1;
    while(i < j){
        do i ++; while(q[i] < x);
        do j --; while(q[j] > x);
        if( i < j) swap(q[i],q[j]);
        else break;
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}

注意边界问题。

merge_sort模板

void merge_sort(int q[],int l,int r){
    
    //判断是否需要排序
    
    if ( l >= r ) return;
    
    int mid = l + r >> 1;
    merge_sort(q,l,mid);
    merge_sort(q,mid + 1,r);
    
    //排序存入temp数组
    
    int i = l,j = mid + 1,k = 0;
    while(i <= mid && j <= r){
        if(q[i] < q[j]) temp[k++] = q[i++];
        else temp[k++] = q[j++];
    }
        while(i <= mid) temp[k++] = q[i++];
        while(j <= r) temp[k++] = q[j++];
        //归还
        for(i = l,j = 0;i <= r; i ++,j ++ ) q[i] = temp[j];
}

归还避免空间浪费

acwing-------基础算法

posted @ 2021-03-25 20:56  Xuuxxi  阅读(40)  评论(0)    收藏  举报