sort排序算法必须包含algorithm头文件
sort(a+m,a+n);//将数组a的下标为m的元素到下标为n-1的元素进行从小到大排序
sort(a+m,a+n,comp); //comp为自定义函数,可以自定义排序规则
1. #include<stdio.h> 2. #include<algorithm> 3. #include<iostream> 4. using namespace std; 5. int a[10]={10,75,1,56,87,22,7,6,13,91}; 6. int my_comp(const int &a,const int &b)//建立从大到小排序的comp 7. {return a>b;}//在两个元素相同时一定要返回0或者false 8. int main() 9. { 10. sort(a+0,a+10); 11. for(int i=0;i<10;i++) printf("%d ",a[i]); 12. sort(a+0,a+10,my_comp); 13. for(int i=0;i<10;i++) printf("%d ",a[i]); 14. return 0; 15. }
sort和struct结构体结合运用进行多特征排序
当我们采用sort()函数的默认规则排序结构体时,sort()默认结构体中的第一个成员为第一关键字,第二个成员为第二关键字,……,第N个元素为第N关键字,然后从小到大排序。
例如:我们要将学生的成绩从大到小排序,当成绩相同时,根据姓名字典序小的优先的规则排进行序。
例8.1 每当考试结束,老师总要对学生的成绩进行排序,以便研究学生学习情况。老师发现学生数目庞大,所以找来了会编程的你,并且它给你了全部同学的分数,希望你能按如下规则排序:1.分数高的排在前面;2.如果分数相同,就把名字字典序低的放在前面。
【输入格式】
第一行一个整数n
接下来n行每行一个学生名字和一个分数。
【输出格式】
每行一个名字和一个分数
【输入样例】
3
Xiaoxiao 396
Yingmo 405
Diyucailang 399
【输出样例】
Yingmo 405
Diyucailang 399
Xiaoxiao 396
1. #include<stdio.h> 2. #include<algorithm> 3. #include<string.h> 4. #include<iostream> 5. using namespace std; 6. 7. struct student{ 8. char name[20]; 9. int score; 10. }a[100]; 11. 12. //建立多特征排序规则comp 13. int score_comp(const student &a,const student &b) 14. { 15. if(a.score>b.score) return 1; 16. if(a.score<b.score) return 0; 17. if(strcmp(a.name,b.name)<0) return 1; 18. return 0; 19. } 20. 21. int main() 22. { 23. int n; 24. scanf("%d",&n); 25. for(int i=0;i<n;i++){ 26. scanf("%s",a[i].name); 27. scanf("%d",&a[i].score); 28. } 29. sort(a+0,a+n,score_comp); 30. for(int i=0;i<n;i++) printf("%s %d\n",a[i].name,a[i].score); 31. return 0; 32. }