排序:
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;
}