排序 sort函数的基本用法
来源:互联网 发布:淘宝天猫月销量 编辑:程序博客网 时间:2024/04/29 23:57
排序是ACM中经常需要用到的,然而我们需要的效率,冒泡这些排序就算了吧!或许你会写一个快速排序,但再好也没有STL里给你写好了,效率又高的,拿上手就能用的排序方法sort
首先要用sort函数,我们需要这样一个头文件#include<algorithm>
下面我们来一步一步看看这个函数到底是怎么个用法
在STL中sort函数是这样定义的 sort(begin,end) 或 sort(begin,end,cmp)
begin表示要排序的数组的开头;
end表示要排序的数组的结尾(不包括结尾);
cmp是一个比较策略,可以自己写出所需要的比较策略,cmp这个名字是可以自定义的
当我们使用第一种定义时,也就是不给出比较策略是,是默认升序的;
简单来说:
默认升序对于数字来说,当然是从小到大了,对于字符就是按ASCII码来区分了!
严格点来讲:
是自动调用了'<'的重载函数
我们用一个大小为10的数组arr来举例子吧!
int arr[10]={1,3,5,7,9,2,4,6,8,10};sort(arr,arr+10); for(int i=0;i<10;i++) printf("%d ",arr[i]);printf("\n");
默认升序明显是不能满足我们的需要的,那么我们若是想降序呢?
别忘记了我们可以自己写一个比较策略,下面我们来看这个比较策略是怎样写的
bool cmp(int a,int b) //返回类型一定要bool,比较什么类型,就定义两个什么类型去比较{if(a>b) return true; //如果a>b,那么我们就返回对,那就把他排前面;else return false;}
完整的程序:
bool cmp(int a,int b) {return a>b; //这个写法是跟上面的比较策略一样的效果的}int main(){int arr[10]={1,3,5,7,9,2,4,6,8,10};printf("按比较策略cmp得到的结果 : ");sort(arr,arr+10,cmp); //3个参数for(int i=0;i<10;i++)printf("%d ",arr[i]);printf("\n");return 0;}
当然这样的简单排序不能满足我们的需求,我们或许会用到2级排序3级排序
下面我们来看看二级排序
例:我们需要对一个班里的学生排序,给出的排序策略是先按名字字典序排,若名字一样按年龄小的优先。我们不妨定义一个结构体来实现;
struct Student{char name[10];int age;}student[5]; //定义5个人;bool cmp(Student a,Student b) //比较策略{if(strcmp(a.name,b.name)==0) return a.age<b.age; //如果名字相同,返回年龄小的return strcmp(a.name,b.name)== -1; //否则就返回字典序小的名字}
int main(){strcpy(student[0].name,"tom"),student[0].age=18; //赋值,写得有点难看strcpy(student[1].name,"lucy"),student[1].age=20;strcpy(student[2].name,"marry"),student[2].age=19;strcpy(student[3].name,"tom"),student[3].age=17;strcpy(student[4].name,"hzt"),student[4].age=20;printf("排序前:\n");for(int i=0;i<5;i++)printf("%-10s %d\n",student[i].name,student[i].age); //这里的%-10s是限定输出10的宽度,左对齐,为了易于分辨而已sort(student,student+5,cmp);printf("\n排序后:\n");for(i=0;i<5;i++)printf("%-10s %d\n",student[i].name,student[i].age);return 0;}
排序后两个人,名字一样,年龄小的在前
- 排序 sort函数的基本用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- MATLAB中排序函数sort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort()的用法
- C++排序函数 sort(),qsort()的用法
- ExtJs 一些常用啊例子如界面布局,组件的使用等之类的
- 设计模式入门学习 组合模式
- 在C#中改变系统时间 && 得到系统时间改变通知
- Oracle性能优化下的时间模型
- Mindjet MindManager使用问题及解决之道
- 排序 sort函数的基本用法
- SQL Server 2008-建立分区表(Table Partition)
- 怎么解决IIS:HTTP 错误禁止访问:连接的用户过多
- 一个匹配数字和字母密码的正则表达式
- 编译与解释的区别
- hibernate 根据对象关系表生成 数据库
- jquery常用方法
- 优化Apache,提高并发
- 【摘录】android编译系统Android.mk写法