题目:有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。 题目链接( 九度OJ的):http://ac.jobdu.com/problem.php?pid=1061 核心代码:
struct student { int grade; char name[101]; int age; }stu[1001]; bool cmp(student a,student b) { int t = strcmp(a.name,b.name); if(a.grade != b.grade) return a.grade < b.grade; else if(t != 0) return t < 0; else return a.age < b.age; } sort(stu,stu+n,cmp);关于sort函数中的cmp函数有着不同的写法,以刚刚的整形元素比较为例 还有人是这么写的:
bool cmp(const int &a, const int &b){ return a>b; } int a[10]; sort(a,a+10,cmp);思考:int 和const int&有什么区别呢? 原来:作为函数参数:int这种写法是值传递,const int&则是引用传递。 “值传递”——由于函数将自动产生临时变量用于复制该参数,效率较低。 “引用传递”仅借用一下参数的别名而已,不需要产生临时对象。效率较高。 tips:“引用传递”有可能改变参数,const修饰可以解决这个问题。 查看更多:http://blog.sina.com.cn/s/blog_76e067cf01019q5r.html
补充知识:C中qsort中的cmp()与sort的cmp()对比(以int为例)
名称返回值类型语句qsort(c)intreturn a - bsort(c++)boolreturn a < b