介绍: sort就是快速排序,是稳定的排序,所谓稳定就是如果原数组中存在 a =b ,排序后a,b的相对位置不变,最坏时间复杂度为nlog(n),是acmer的基本技能
学会用stl里面的sort,包括头文件和比较函数cmp的多种写法
http://blog.csdn.net/jiary5201314/article/details/8170217
了解vector容器,知道怎样用vector
http://blog.csdn.net/phoebin/article/details/3864590(了解怎样插入元素,清空元素,以及头文件,定义即可)
了解less和greater
http://www.cppblog.com/mzty/archive/2005/12/15/1770.html
理解以下代码:
vector < int > vect; //... sort(vect.begin(), vect.end()); sort(vect.begin(), vect.end(), less<int>() );
总结:学习sort,要学习数组的sort和 vector容器的sort ,这两种方式都会了就可以了
参考代码:
请自行了解结构体的相关用法:
http://blog.csdn.net/xiaoyali/article/details/4393486
比如有以下信息,现在要对相关信息排序
| 变量名 | 类型 | 意义 |
| id | int | 队伍编号 |
| num | int | 幸运数字 |
| name | 字符串 | 队名 |
| cls | 字符串 | 班级名 |

比较函数写法参考代码:
bool cmp_num(ss x,ss y)//幸运数字从小到大排序 { return x.num<y.num; } bool cmp_name(ss x,ss y)//队名从按照字典序排序 { return strcmp(x.name,y.name)<0; } bool cmp_num_name_cls(ss x,ss y)//先按幸运数字从小到大排,如果一样再按队名字典序排,如果还是一样,按照班级名字典序排 { if(x.num==y.num) { if(strcmp(x.name,y.name)==0) { return strcmp(x.cls,y.cls)<0; } return strcmp(x.name,y.name)<0; } return x.num<y.num; }
完整代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 100010 struct ss { int num; char name[20]; char cls[20]; }a[N]; bool cmp_num(ss x,ss y) { return x.num<y.num; } bool cmp_name(ss x,ss y) { return strcmp(x.name,y.name)<0; } bool cmp_num_name(ss x,ss y) { if(x.num==y.num)return strcmp(x.name,y.name)<0; return x.num<y.num; } bool cmp_num_name_cls(ss x,ss y) { if(x.num==y.num) { if(strcmp(x.name,y.name)==0) { return strcmp(x.cls,y.cls)<0; } return strcmp(x.name,y.name)<0; } return x.num<y.num; } int main() { int n; while(~scanf("%d",&n)) { int i; for(i=0;i<n;i++) { scanf("%d%s%s",&a[i].num,a[i].name,a[i].cls); } sort(a,a+n,cmp_num_name_cls); printf("%-10s%-10s%-20s%-20s\n","编号","幸运数字","队名","班级"); for(i=0;i<n;i++) { printf("%-10d%-10d%-20s%-20s\n",i+1,a[i].num,a[i].name,a[i].cls); } } return 0; } /* 10 7 你猜 计算机科学与技术 9 你猜我猜不猜 医学信息工程 4 XXXXXL 医学信息 5 名字长长长才能AC 计算机 7 楼上等我 医信 11 这游戏真难 听力 2 求不坑 管理 5 名字长长长才能AC 计算机科学与技术 10 DLROWOLLEH 大医信 11 念来过倒要字名 计算机 5 3 abc aaa 3 abcd accc 4 fbi sss 3 ddd 66666 7 gs 77s */
题目练习:
http://www.patest.cn/contests/pat-a-practise/1028
浙公网安备 33010602011771号