P1177 【模板】排序 - 洛谷

我用归并排序写的。(时间复杂度O(nlogn),空间复杂度O(n))。

#include<bits/stdc++.h>
using namespace std;

vector<int> A;
//归并排序
void gbsort(int l,int r)
{
    vector<int> temp;
    if(l==r) return;
    int m=((l+r)>>1);
    printf("划分的区间:[%d,%d],[%d,%d]\n",l,m,m+1,r);
    gbsort(l,m);
    gbsort(m+1,r);
    int curL=l,curR=m+1; //左右分为[l,m] [m+1,r]
    for(int i=0;i<r-l+1;i++)
    {
        if( curL>m )
        {
            temp.push_back(A[curR]);
            curR++;
        }
        else if( curR>r )
        {
            temp.push_back(A[curL]);
            curL++;
        }
        else if(A[curL]>A[curR])
        {
            temp.push_back(A[curR]);
            curR++;
        }
        else if(A[curL]<=A[curR])
        {
            temp.push_back(A[curL]);
            curL++;
        }
    }
    for(int i=l;i<=r;i++)
    {
        A[i]=temp[i-l];
    }
}

int main()
{
    int N;
    cin >> N;
    for(int i=0;i<N;i++)
    {
        int x;
        cin >> x;
        A.push_back(x);
    }
    // sort(A.begin(),A.end());
    gbsort(0,N-1);
    for(int i=0;i<N;i++)
    {
        cout << A[i] << ' ';
    }
    return 0;
}

C++标准库sort用的是快速排序