当前位置:   article > 正文

三分钟学会sort排序详解(新手版)

sort排序

一.sort基础

                  1.sort函数默认的排序方式升序排序即从小到大。  

                  2.sort排序格式:sort(begin,end,cmp); (sort函数中参数有三个(对于一般排序第三个可以省略) 其中begin是排序数组的起始地址, end是排序数组的结束地址

                举例简单sort排序

  1. #include <iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. int a[6]={3,5,8,6,2,9};
  7. sort(a,a+6);
  8. for(int i=0;i<6;i++)
  9. cout<<a[i]<<" ";
  10. return 0;
  11. }

运行结果

 二.升序降序多种方式

除了默认排序外还有很多种排序方式

1.升序方式:

  cmp函数:             !!!这串代码放在int main()之前

  1. bool cmp(int a,int b)
  2. {
  3. return a>b;
  4. }

实例,在上面代码基础上修改一下

  1. #include <iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. bool cmp(int a,int b)
  5. {
  6. return a<b;
  7. }
  8. int main()
  9. {
  10. int a[6]={3,5,8,6,2,9};
  11. sort(a,a+6,cmp);
  12. for(int i=0;i<6;i++)
  13. cout<<a[i]<<" ";
  14. return 0;
  15. }

运行结果

与上面是一样的

 对于我们学习C++语言来说,只会升序是不够的还要会降序按照字典排序,

2.降序方式:
          第一种 

          改变上面cmp函数返回值的小于符号为大于符号

改了之后如下

  1. #include <iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. bool cmp(int a,int b)
  5. {
  6. return a>b; //改“a<b”为“a>b",
  7. }
  8. int main()
  9. {
  10. int a[6]={3,5,8,6,2,9};
  11. sort(a,a+6,cmp);
  12. for(int i=0;i<6;i++)
  13. cout<<a[i]<<" ";
  14. return 0;
  15. }

 运行结果

     第二种   

     greater函数:
           格式:

sort(a,a+6,greater<int>());

greater是已经给定可以直接使用的排序函数,自己用,不需要定义

  1. #include <iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. int a[6]={3,5,8,6,2,9};
  7. sort(a,a+6,greater<int>());
  8. for(int i=0;i<6;i++)
  9. cout<<a[i]<<" ";
  10. return 0;
  11. }

运行结果

升序,降序函数有很多,掌握这两个基本能够完成大部分任务, 

常见特殊例题

cmp特殊用法,

例题,现在有一组数字为两位数,要按每个数的个位数从大到小排序(从小到大)

  1. #include <iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. bool cmp(int x, int y)
  5. {
  6. return x % 10 > y % 10;
  7. }
  8. int main()
  9. {
  10. int a[5] = { 23,19,54,16,17 };
  11. sort(a, a + 5, cmp);
  12. for (int i = 0; i < 5; i++)
  13. cout << a[i] << ' ';
  14. return 0;
  15. }

运行结果

从小到大,同理,改一下符号即可

三.字母按字典排序

         string函数

                   格式:

sort(str.begin(),str.end());

完整代码

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. int main()
  6. {
  7. string str;
  8. cin>>str;
  9. sort(str.begin(),str.end());
  10. cout<<str;
  11. return 0;
  12. }

运行结果

第一行是自己输入的:shangdong

第二行为结果 

四.结构体的按字母排序排序

       (结构体排序是最难的,同时也是可以让你代码提升一个阶梯对大招)

         没有学过结构体的先去看看结构体,不然看不懂

先上代码

  1. #include <iostream>
  2. #include <cstring>
  3. #include <memory.h>
  4. #include <algorithm>
  5. using namespace std;
  6. struct student
  7. {
  8. char name[20];
  9. char gender;
  10. unsigned long birthday;
  11. double height;
  12. double weight;
  13. };
  14. int cmp(student a,student b)
  15. {
  16. return strcmp(b.name,a.name)>0; //strcmp函数,让首字母按字典排序,升序降序改变符号即可
  17. }
  18. student room[4] = {
  19. {"Lixin ", 'M', 19980301, 1.82, 65.0},
  20. {"Zhangmeng", 'M', 19980902, 1.75, 58.0},
  21. {"Helei ", 'M', 19981203, 1.83, 67.1},
  22. {"Geyujian ", 'M', 19980101, 1.70, 59.0}
  23. };
  24. int main()
  25. {
  26. sort(room,room+4,cmp); //引用cmp函数
  27. for (int i = 0; i < 4; i ++)
  28. {
  29. cout<< room[i].name << "\t"
  30. << room[i].gender << "\t"
  31. << room[i].birthday << "\t"
  32. << room[i].height << "\t"
  33. << room[i].weight << "\n";
  34. }
  35. return 0;
  36. }

运行结果 

我们的看到同学的第一个字母按字典排序了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/807087
推荐阅读
相关标签
  

闽ICP备14008679号