Sort函数和归并排序哪个更快?
  • 板块学术版
  • 楼主灞波儿奔
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/8/18 11:26
  • 上次更新2023/11/6 20:03:36
查看原帖
Sort函数和归并排序哪个更快?
219996
灞波儿奔楼主2020/8/18 11:26

RT
为什么这道题(P1626象棋比赛)我用归并排序TLE一个点(测试点2)但是用sortsort却AC了?


归并排序:

#include<bits/stdc++.h>
using namespace std;
int n,k,a[100010],b[100010],ans;
void msort(int *a,int *b,int l,int r){
	if(l==r)return;
	int mid=(l+r)/2,t1=l,t2=mid+1;
	msort(a,b,l,mid);
	msort(a,b,mid+1,r);
	for(int i=l;i<=r;++i){
		if(t1>mid)b[i]=a[t2++];
		else if(t2>r)b[i]=a[t1++];
		else if(a[t1]>a[t2])b[i]=a[t2++];
		else b[i]=a[t1++];
	}
	for(int i=1;i<=r;++i)a[i]=b[i];
}
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
	}
	msort(a,b,1,n);
	memset(b,0,sizeof b);
	for(int i=1;i<n;++i){
		b[i]=a[i+1]-a[i];
	}
	memset(a,0,sizeof a);
	msort(b,a,1,n-1);
	for(int i=1;i<=k;++i){
		ans+=b[i];
	}
	printf("%d",ans);
	return 0;
}

Sort:

#include<bits/stdc++.h>
using namespace std;
int n,k,a[100010],b[100010],ans;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
	}
	sort(a+1,a+n+1);
	for(int i=1;i<n;++i){
		b[i]=a[i+1]-a[i];
	}
	sort(b+1,b+n);
	for(int i=1;i<=k;++i){
		ans+=b[i];
	}
	printf("%d",ans);
	return 0;
}

这么说,我们是不是只需要会用sortsort就OK了?

2020/8/18 11:26
加载中...