B3798 梦熊培养计划

排序: sort() 函数
方法 1 sort( 起始地址,末尾地址 +1)
方法 2 sort( 起始地址,末尾地址 +1 cmp) //cmp 是自定义的排序规则
sort 是默认升序排序的,如果需要自定义排序,可以写一个比较函数,用第二种方法
排序。
例如:对一个数组 a 进行升序排列,( a 中的元素存储从 a[1]~a[n] ),则可以写成:
sort(a+1, a+1+n);
如果元素存储是 :a[0]~a[n-1] , 则写成: sort(a, a+n);
注意: sort 的时间复杂度为 o(nlogn) ,而冒泡排序的时间复杂度为: o(n 的平方 )
sort 比冒泡排序用时少
#include<bits/stdc++.h>
using namespace std;
struct student{
	string name;
	double ch;
}s[100002];
bool gt(student s1,student s2){
	if(s1.ch!=s2.ch) return s1.ch>s2.ch;
	return s1.name<s2.name;
}
int score[25];
int main(){
	//freopen("t1.in","r",stdin);
	//freopen("t1.out","w",stdout);
	int m,n;
	double sum=0;
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++){
		cin>>s[i].name;
		sum=0;
		for(int j=1;j<=m;j++){
			cin>>score[j];
			sum+=score[j];
		}
		double ave=sum*1.0/m;
		double a=0;
		for(int t=1;t<=m;t++){
			a+=(score[t]-ave)*(score[t]-ave);
		}
		double cha=a/m;
		s[i].ch=sqrt(cha);
	}
	sort(s+1, s+n+1, gt);
	if(n<=20){
		for(int i=1;i<=n;i++){
			cout<<s[i].name<<endl;
		}
	}
	else{
		for(int i=1;i<=20;i++){
			cout<<s[i].name<<endl;
		}
	}
	return 0;
}

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值