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用的是快速排序