zoukankan      html  css  js  c++  java
  • c++STL之sort排序

          排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序。
                                                                                          ————《信息学奥赛一本通》

          

     1 #include<iostream>
     2 #include<algorithm> 8 int main()
     9 {
    10     int a[10000]; 
    11     int n;
    12     std::cin>>n;
    13     for(int i=0;i<n;i++)
    14     {
    15         std::cin>>a[n];//输入
    16     }
    17     std::sort(a+0,a+n);//sort 排序 含义:升序排序a数组的第0位到a数组的第n位
    18     for(int i=0;i<n;i++)
    19     {
    20         std::cout<<a[n];//输出
    21     }
    22     return 0;
    23 }

    以上是最最简单的一个用sort排序的程序

    读者可能有疑问了,难道sort只能升序排序吗?

    其实不然。sort默认确实是升序排序,不过你可以自己定义排序规则,比如说下面这样:

     1 #include<iostream>
     2 #include<algorithm>
     3 int aa(int x,int y)    自己定义的排序规则,可以实现降序排序
     4 {
     5     if(x>y) return 1;
     6     else return 0;
     7 }
     8 int main()
     9 {
    10     int a[10000]; 
    11     int n;
    12     std::cin>>n;
    13     for(int i=0;i<n;i++)
    14     {
    15         std::cin>>a[n];
    16     }
    17     std::sort(a+0,a+n,aa);//排序a数组的第0位到第n位,用自己定义的aa排序规则
    18     for(int i=0;i<n;i++)
    19     {
    20         std::cout<<a[n];
    21     }
    22     return 0;
    23 }

    这里定义的aa函数,就是你进行sort排序时的规则,这里这个规则可以随你写,比如说按照其他特征排序,如:关键字等等,而且其中的排序规则可以有多个,比如说下面这个:

    1 int aa(const student & a,const student &b)
    2 {
    3     if(a.score>b.score) return 1;
    4     if(a.score<b.score) return 0;
    5     if(a.name<b.name) return 1;
    6 }

    这个是对一个结构体中的数据进行排序,排序的规则是按照结构体中score的大小降序排序,如果两个score相等,就按照name的字典序升序排序,相信大家动能看得懂。

    下面贴出一个例题:

    Combination

       (iknowss.cpp)

    Description

    有 n 个正整数,伟大的中国人民要把它们连接成一排,形成一个最大的integer。

    举个栗子:n=3 时,3 个整数 1,3,4 联接成的最大整数为:431 又如:n=4 时,4 个整数 7,13,4,246 联接成的最大整数为:7424613

    Input

    N后跟n个正整数。

    Output

    连成的最大数

    Hint

       对于前7个数据,n<=100000

       对于第8个数据,n<=10000

       对于第9个数据,n<=1000

       对于第10个数据,n<=100

       对于所有数据,integer<=10^10

      

    数据随机,略弱=-=

     (以上又是二货学长改自noip题)

    这个题最简单的方法就是用字符串格式输入的这几个数,按照字符串字典序sort,再降序输出就可以了(为什么这次学长出的题这么水。。。于是我就有时间多讲了点sort。。。)

    以下贴出源代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<string>
     4 #include<algorithm>
     5 using namespace std;
     6 int aa(string x,string y)
     7 {
     8     if(x>y) return 1;
     9     else return 0;
    10 }
    11 int main()
    12 {
    13     freopen("iknowss.in","r",stdin);
    14     freopen("iknowss.out","w",stdout);
    15     int n;
    16     string zong[100001];
    17     cin>>n;
    18     for(int i=0;i<n;i++)
    19     {
    20         string zhong;
    21         cin>>zhong;
    22         zong[i]=zhong;
    23     }
    24     sort(zong+0,zong+n,aa);
    25     for(int i=0;i<n;i++)
    26     {
    27         cout<<zong[i];    
    28     }
    29     return 0;
    30 } 

    完。

  • 相关阅读:
    易用网页下载器V0.1
    重复造轮之权限管理系统
    网页格式化排版代码,专用信息采集后的内容整理
    随机点名软件
    PHP导入Excel表格,读取Excel的内容到数组。
    汉字的书写效果的实现
    php的一个断点续传下载实现
    sentry的安装和使用以及各种问题处理
    CentOS下安装Redis及Redis的PHP扩展
    用ASP.NET_Regsql.exe创建Session数据库
  • 原文地址:https://www.cnblogs.com/zhangone/p/5011031.html
Copyright © 2011-2022 走看看