stable_sort使用 ---NOJ---1073 成绩排名
来源:互联网 发布:矩阵和行列式的区别 编辑:程序博客网 时间:2024/06/13 11:58
题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1073
因为题目要求在序号相同时保持原有顺序,而直接使用sort时,会在有相同顺序时破坏原有顺序,所以直接使用stable_sort进行排序。而stable_sort的实现参照归并排序。
归并排序是稳定的,而快速排序和堆排序都不稳定
不稳定:就是大小相同的两个数,经过排序后,最终位置与初始位置交换了。
快速排序:
27 23 27 3
以第一个27作为基准,则27与后面那个3交换,形成
3 23 27 27,排序经过一次结束,但最后那个27在排序之初先于初始位置3那个27,所以不稳定。
堆排序:
比如:3 27 36 27,
如果堆顶3先输出,则,第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27,这样说明后面的27先于第二个位置的27输出,不稳定。
归并排序(MergeSort)
归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。
#include <iostream>#include <cstdio>#include <algorithm> #include <cstring>using namespace std;char a[105][15];typedef struct Date{ int score; int index;}date;int cmp(date x,date y){ return x.score>y.score;}int main(){ int T; scanf("%d",&T); for(int j=1;j<=T;j++) { date b[105]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s%d",a[i],&b[i].score); b[i].index=i; } stable_sort(b,b+n,cmp); printf("Case %d:\n",j); for(int i=0;i<n;) { int cnt=1; int q=i; while(i+cnt<n&&b[i].score==b[i+cnt].score) //注意while的边界判断 cnt++; for(int w=0;w<cnt;w++) { printf("%d %s %d\n",q+1,a[b[i].index],b[i].score); i++; } } } return 0;}
0 0
- stable_sort使用 ---NOJ---1073 成绩排名
- noj 1073 成绩排名
- NOJ 成绩排名
- NOJ1073成绩排名——stable_sort
- stable_sort使用
- stable_sort
- stable_sort
- stable_sort
- stable_sort()
- stable_sort
- 1073成绩排名
- 使用STL中的stable_sort()函数进行排序
- 南邮 OJ 1073 成绩排名
- 成绩排名
- 成绩排名
- 成绩排名
- 成绩排名
- 成绩排名
- Splash的实现
- 区间DP
- 343IntegerBreak
- Spring Mvc那点事---(14)Spring Mvc之mybatis调用存储过程
- variable-resolver
- stable_sort使用 ---NOJ---1073 成绩排名
- JSP小细节
- 如何设定Android Activity间切换时的动画
- 外部CAD绘制的三维图导入hypermesh采用STP格式
- LPC特征提取
- 【matlab/C++】MATLAB直接生成Java&C/C++代码
- 内核级rootkit Kbeast的安装与使用 20160607
- 网站、系统负载高排查总结
- DP 通过金矿模型介绍动态规划