结构体用sort快排的方法

struct node{
int k,s;
}p[]; bool cmp1(node x,node y){
return x.s>y.s; //定义降序排序(从大到小)
}
bool cmp2(node x,node y){
return x.k<y.k; //定义升序排序(从小到大)
}
sort(p+1,p+n+1,cmp2); //排序 

看题目,洛谷p1068

题目描述

世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m×150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

输入输出格式

输入格式:

第一行,两个整数 n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n表示报名参加笔试的选手总数,m表示计划录取的志愿者人数。输入数据保证 m×150%向下取整后小于等于 n。

第二行到第 n+1行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号 k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。数据保证选手的报名号各不相同。

输出格式:

第一行,有2个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。

从第二行开始,每行包含2个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

输入输出样例

输入样例#1:

6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88
输出样例#1:

88 5
1005 95
2390 95
1000 90
1001 88
3239 88

说明

【样例说明】

m×150%=3×150%=4.5,向下取整后为4。保证44个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于88 的选手都可以进入面试,故最终有5个人进入面试。

NOIP 2009 普及组 第二题

这道题就是一个典型的结构体的排序

但是首先需要面试成绩的从大到小的排序,然后才是相同的成绩再去从小到大对编号去排序。

而sort是一个不稳定的排序,因为当数据量稍大时,sort()就会使用快速排序,而快速排序是不稳定排序,即不能保证原序列中相等的元素在排序后保持相对位置不变。

即如果排序之后的两者成绩相同,但是由于快排是不停的交换位置的排序,所以相同成绩的两者的相对位置会变换,所以造成的不稳定排序。

稳定排序的概念:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r [ i ]=r [ j ],且r [ i ]在r [ j ]之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

所以这题应该用的是STL里面的稳定排序stable_sort。

AC代码:

#include<iostream>
#include<algorithm>
using namespace std; struct node{
int k,s;
}p[]; bool cmp1(node x,node y){
return x.s>y.s; //定义降序排序(从大到小)
}
bool cmp2(node x,node y){
return x.k<y.k; //定义升序排序(从小到大)
} int main(){
int n,m;
cin>>n>>m;
m=m*/;
for(int i=;i<=n;i++){
cin>>p[i].k>>p[i].s;
}
sort(p+,p+n+,cmp2); //快排排序
stable_sort(p+,p+n+,cmp1); //稳定排序
cout<<p[m].s<<" ";
for(int i=m+;i<=n;i++){
if(p[i].s==p[m].s){
m++;
}
else break;
}
cout<<m<<endl;
for(int i=;i<=m;i++){
cout<<p[i].k<<" "<<p[i].s<<endl;
}
return ;
}

还有一种是对字符串的结构体sort排序。

题目背景

宇宙总统竞选

题目描述

地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入输出格式

输入格式:

president.in

第一行为一个整数n,代表竞选总统的人数。

接下来有n行,分别为第一个候选人到第n个候选人的票数。

输出格式:

president.out

共两行,第一行是一个整数m,为当上总统的人的号数。

第二行是当上总统的人的选票。

输入输出样例

输入样例#1: 复制

5
98765
12365
87954
1022356
985678
输出样例#1: 复制

4
1022356

说明

票数可能会很大,可能会到100位数字。

n<=20

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
string str;
int p;
}aaa; bool cmp(aaa a,aaa b){
if(a.str.size()==b.str.size()){
return a.str<b.str;
}
return a.str.size()<b.str.size();
}
int main(){
aaa m[];
int n;
cin>>n;
for(int i=;i<=n;i++){
cin>>m[i].str;
m[i].p=i;
}
sort(m+,m+n+,cmp);
cout<<m[n].p<<endl<<m[n].str;
return ;
}

结构体的sort排序的更多相关文章

  1. sort+结构体实现二级排序

    之前介绍的sort函数由于其效率较高,使用较为简单让我用起来那叫一个爽,今天再写一篇使用sort+结构体实现二级排序的方法. 还是先想个问题吧,比如我想输入5个同学的名字和身高,然后得到他们身高的降序 ...

  2. Problem T: 结构体--学生信息排序

    Problem T: 结构体--学生信息排序 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2219  Solved: 1305[Submit][Sta ...

  3. YTU 2878: 结构体--学生信息排序

    2878: 结构体--学生信息排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 297  解决: 148 题目描述 定义存放一个学生信息的结构体类型,学生信息包括:姓名,学号,性别,院 ...

  4. sort();对结构体数组的排序

    sort(); 位于C++ 头文件 #include<algorithm>中 数组排序(从小到大,从大到小) 结构体排序(数字参数从大到小...字符串为参数 字典序....) 代码示例:( ...

  5. PAT A1075 PAT Judge (25 分)——结构体初始化,排序

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  6. c++结构体双关键字排序

    #include<bits/stdc++.h> using namespace std; struct node{ int l,r; }num[]; int w_comp(const no ...

  7. 使用qsort对结构体的数据排序

    1007 DNA 排序 题目大意: 序列“未排序程度”的一个计算方式是元素乱序的元素对个数.例如:在单词序列“DAABEC'”中,因为D大于右边四个单词,E大于C,所以计算结果为5.这种计算方法称为序 ...

  8. 关于priority_queue和sort()对结构体数组的排序

    知乎的这个答案很清晰https://www.zhihu.com/question/35736022 #include <iostream> #include <algorithm&g ...

  9. Java中如何实现类似C++结构体的二级排序

    1:实现Comparable接口 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; ...

随机推荐

  1. centos7 创建桌面快捷方式(chrome,eclipse)

    在将eclipse-SDK-3.7.2-Linux-gtk.tar.gz解压到某个目录下之后,命令行进行如下编辑 vi /usr/share/applications/eclipse.desktop ...

  2. POJ-1260-Pearls-dp+理解题意

    In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces a lot of jew ...

  3. Foundation框架系列-NSDictionary

    排序 对字典中的key按照字母升序排序 // NOTE: 排序,得出最终请求字串 NSArray* sortedKeyArray = [[tmpDict allKeys] sortedArrayUsi ...

  4. 1、docker centos 安装

    Docker for CentOS: 第一步:使用官方yum仓库 [root@linux-node1 ~]# yum install -y yum-utils [root@linux-node1 ~] ...

  5. 在github上怎样克隆vue项目及运行

    长时间不做vue项目,今天看vue项目运行时有些指令忘记了,在这里写下相关指令 .克隆已有项目,一般情况项目中的README.md写的是项目运行步骤,一般项目的运行如下 克隆项目 git clone ...

  6. TestNG 入门教程【转】

    TestNG 入门教程[转] 国庆7天假期,大部分朋友都出去旅游了,微信圈里全是晒旅游的照片, 东南亚游,欧洲游呀,真是羡慕呀. 悲惨的我只去了上海野生动物园, 在家休息,利用这段假期,把之前学过的东 ...

  7. 【JZOJ3318】Brunhilda的生日

    description 除去对铁质盔甲强烈的热爱,Brunhilda是一个正常的7岁女孩.近期,她正在策划一个完美的生日派对.她发明了如下的一个游戏:所有的孩子在一个数k被宣读之前不停地跑来跑去.当这 ...

  8. W: 仓库 “http://ppa.launchpad.net/levi-armstrong/qt-libraries-trusty/ubuntu xenial Release” 没有 Release 文件。

    解决办法:将对应的PPA删除掉即可 使用以下命令切换到对应PPA目录: cd /etc/apt/sources.list.dsudo rm levi-armstrong-ubuntu-qt-libra ...

  9. Emmet 快捷支持

    1.https://docs.emmet.io/    [快捷demo视频演示] 2.https://docs.emmet.io/cheat-sheet/   [更多Emmet快捷案例示范]

  10. EF实体模型的更新

    摘要 解决前期数据库优先添加的实体,然后数据库表结构发生变化后,导致代码操作EF插入更新数据失败问题 EF 数据库更新模型 相比大家在使用实体操作数据库的时候,都是采取数据库优先,手动添加实体模型.但 ...