关于时间复杂度O(n+k)的计数排序没过,而O(n log n)的归并排序AC了这件事!
以下为我写的计数排序C++代码,60分。
#include <bits/stdc++.h>
#define N 1000005
#define K 1000001
using namespace std;
int a[N],n,b[N];
int cnt[K];
int main(){
cin>>n;
for (int i=1;i<=n;++i){
cin>>a[i];
++cnt[a[i]];
}
for (int i = 0, j = 0; i < K; ++i){
for (int k=1;k<=cnt[i];++k)b[++j]=i;
}
for (int i=1;i<=n;++i)
cout<<b[i]<<' ';
cout<<endl;
return 0;
}
以下为我写的归并排序C++AC码:
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int a[N],t[N];
void m_sort(int l,int r){
if(l==r) return;
int mid=l+r>>1;
m_sort(l,mid);m_sort(mid+1,r);
int i=l,j=mid+1;
int k=l;
while(i<=mid&&j<=r) t[k++]=a[i]<a[j]?a[i++]:a[j++];
while(i<=mid) t[k++]=a[i++];
while(j<=r) t[k++]=a[j++];
for(i=l;i<=r;i++) a[i]=t[i];
}
int main(){
int n; cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
m_sort(0,n-1);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
return 0;
}
谢谢各位大佬帮我解释