sort 排序(4)
2020-02-02 19:46
155 查看
sort 排序
sort 排序函数是在 C++ 中的一个库函数,它所在的头文件
为 algrithm.h,它其实就是对快速排序算法的封装。它的时间复杂度为 O(n ∗ log(n))**
使用范围: 数组结构体 sting 队列 vector……
形式:sort(参数一, 参数二,参数三)
形式:sort(首地址, 尾地址,cmp)(cmp就是自定义的一个函数,意思是按照什么样的规则排序)
sort默认从小到大排序。
eg: int a[5]={2,1,3,4,5}; sort(a,a+5);//0-4 排序 , 区 间 前 开 后 闭
自定义排序:
bool cmp(int a,int b) { return a<b;// 从 小 到 大 排 序 return a>b;// 从 大 到 小 排 序 } sort(a,a+n,cmp);
sort+ 结构体排序:
bool cmp1(node a,node b)// 自 定 义 排 序 函 数 { if(a.grade!=b.grade) return a.grade >b,grade; return a.id<b.id;// 按照 id 排序 ,a<b 表示升序 ,a>b 降序 } sort(a,a+n,cmp1);
板子基本就是上面那样,还是直接来几个板子题吧!为了更好的理解,这几个板子稍微复杂点。
HDU - 1280 前m大的数
#include<bits/stdc++.h> using namespace std; typedef long long ll; int m,n,i,j,k; int a[10000]; int b[10000*10000/2]; int cmp(const int a,const int b) //定义sort的第三个参数,表示从小到大排列 { return a>b; } int main() { while(scanf("%d %d",&n,&m)!=-1) { for(i=0;i<n;i++) //先读入 scanf("%d",&a[i]); k=0; for(i=0;i<n-1;i++) //求出俩俩数的和,存入一个数组中。 for(j=i+1;j<n;j++) b[k++]=a[j]+a[i]; sort(b,b+(n*(n-1))/2,cmp); //sort排序 for(i=0;i<m;i++) { if(!i) printf("%d",b[i]); else printf(" %d",b[i]); } printf("\n"); } return 0; }
再来一个结构体的板子题:
HDU - 1872 稳定排序
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; struct node { string name; int score; int id; }stu[500],stu1[500]; bool cmp(node a,node b) //其实这个cmp就是定义一个结构体,再让这个结构体按照某种自己想要的顺序排序 { if(a.score!=b.score) return a.score>b.score; else return a.id<b.id; } int main() { int n; while(cin>>n) { for(int i=0;i<n;i++) cin>>stu[i].name>>stu[i].score,stu[i].id=i; sort(stu,stu+n,cmp); int flag=0; for(int i=0;i<n;i++) { cin>>stu1[i].name>>stu1[i].score; if(stu1[i].score!=stu[i].score) flag=1; // Error; else if(stu1[i].name!=stu[i].name) flag=2; // Not Stable; } if(!flag) cout<<"Right"<<endl; else if(flag==1) { cout<<"Error"<<endl; for(int i=0;i<n;i++) cout<<stu[i].name<<' '<<stu[i].score<<endl; } else if(flag==2) { cout<<"Not Stable"<<endl; for(int i=0;i<n;i++) cout<<stu[i].name<<' '<<stu[i].score<<endl; } } return 0; }
相关题目:
A and B and Compilation Errors CodeForces - 519B(贼简单但是坑死宝宝)
Magical Bamboos -Gym - 101350D
Bear and Three Balls- CodeForces - 653A
今年暑假不AC HDU - 2037
The sum problem HDU - 2058
开门人和关门人 HDU - 1234
EXCEL排序 HDU - 1862 (有点难)
统计同成绩学生人数 HDU - 1235
What Is Your Grade? HDU - 1084 (难)
这里给出 What Is Your Grade? HDU - 1084的AC代码:
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; struct node { int num; int time; int id;//用来记录初始每个数的位置 int r;//用来记录每个数出现的次数 int sorce; }stu[1000]; int cmp(node a,node b) { if(a.num!=b.num) return a.num>b.num; if(a.num==b.num) return a.time<b.time; } int cmp1(node a,node b) { return a.id<b.id; } int main() { int n; int num,h,m,sec; int aa[6];//用来记录做出每个题的人数 while(cin>>n) { if(n==-1) break; for(int i=0;i<n;i++) { scanf("%d %d:%d:%d",&num,&h,&m,&sec); stu[i].num=num; stu[i].time=h*3600+m*60+sec; stu[i].id=i; } sort(stu,stu+n,cmp); int s=1; num=stu[0].num; stu[0].r=1; for(int i=1;i<n;i++)//统计做出n个题的这个人在所有做出这个题的人数的排名 { if(num==stu[i].num) { s++; stu[i].r=s; if(i==n-1) { aa[num]=s; break; } } else { aa[num]=s; num=stu[i].num; s=1; stu[i].r=s; if(i==n-1) aa[num]=s; } } for(int i=0;i<n;i++) { if(stu[i].num==5) stu[i].sorce=100; else if(stu[i].num==4) { if(stu[i].r<=aa[4]/2||aa[4]==1) stu[i].sorce=95; else stu[i].sorce=90; } else if(stu[i].num==3) { if(stu[i].r<=aa[3]/2||aa[3]==1) stu[i].sorce=85; else stu[i].sorce=80; } else if(stu[i].num==2) { if(stu[i].r<=aa[2]/2||aa[2]==1) stu[i].sorce=75; else stu[i].sorce=70; } else if(stu[i].num==1) { if(stu[i].r<=aa[1]/2||aa[1]==1) stu[i].sorce=65; else stu[i].sorce=60; } else stu[i].sorce =50; } sort(stu,stu+n,cmp1); for(int i=0;i<n;i++) printf("%d\n",stu[i].sorce); printf("\n"); } return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique
- vector中sort排序(解决char类型数据无法排序的问题)
- 详细解说 STL 排序(Sort)
- 我的hadoop初学程序------简单数据排序-------Sort
- shell命令:以空格为分隔符截取文件每行的第一个字符串,并用sort排序,再去掉相同的字符串,将结果输出到另一个文件
- 排序——插入排序(insertionsort)
- sort函数的用法(C++排序库函数的调用) 对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。 (一)为什么要用c++标准库里的排序函数 Sort()函数是c+
- Linux 命令 - sort: 行排序文本文件
- STL vector find and sort vector的查找和排序
- 关于利用sort排序对象数组私有数据成员例子
- 排序(SORT)(简介)
- C#对数组排序,Array.sort以及冒泡法
- 插入排序之折半插入排序-binaryinsertsort
- 不使用遍历循环、Linq与Lamba表达式快速对List集合进行筛选与排序——在集合类里使用Find、FindAll与Sort
- Python 中的sort()排序
- c++-algorithm 头文件排序sort
- Springboot 使用JPA对数据进行排序 new Sort(new Sort.Order(Sort.Direction.DESC, "id"))过期处理方法
- jstree详解(解决jstree树的sort和move_node和drop drag一起使用时不能排序的问题)(附源码)
- 用Collections.sort方法对list排序有两种方法
- Java Collections.sort()实现List排序的默认方法和自定义方法