计数排序为啥不能AC
查看原帖
计数排序为啥不能AC
921177
liuhaoyan0323楼主2023/6/10 22:29

关于时间复杂度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; 
}

谢谢各位大佬帮我解释

2023/6/10 22:29
加载中...