sort()函数用法[亲测有效]

sort()函数用法[亲测有效]sort()函数一:简介sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include“algorithm”的c++标准库中。Sort(start,end,cmp)(1)start表示要排序数组的起始地址;(2)end表…

大家好,欢迎来到IT知识分享网。

								sort()函数

一: 简介

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include“algorithm”的c++标准库中。

Sort(start,end,cmp)
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。

二:实例
1.以int为例的基本数据类型的sort使用

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{ 
   
    int a[5]={ 
   1,3,4,2,5};
    sort(a,a+5);
    for(int i=0;i<5;i++)
            cout<<a[i]<<' ';
    return 0;
 }

因为没有cmp参数,默认为非降序排序,结果为:
1 2 3 4 5
若设计为非升序排序,则cmp函数的编写:

bool cmp(int a,int b)
{ 
   
  return a>b;
}

标准库里有现成的,在functional里,直接用就可以。functional提供了一堆基于模板的比较函数对象。它们是(看名字就知道意思了):equal_to、not_equal_to、greater、greater_equal、less、less_equal。对于这个问题来说,greater和less就足够了,直接拿过来用:

升序:sort(begin,end,less<data-type>());

降序:sort(begin,end,greater<data-type>()).
int  main ( )
{ 
   
      int a[20]={ 
   2,4,1,23,5,76,0,43,24,65},i;
      for(i=0;i<20;i++)
          cout<<a[i]<<endl;
      sort(a,a+20,greater<int>());
      for(i=0;i<20;i++)
          cout<<a[i]<<endl;
      return 0;
}

二:引用数据类型string的使用
一个字符串间的字符排序:
使用迭代器可以完成顺序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{ 
   
    string str("hello world");
    sort(str.begin(),str.end());
    cout<<str;
    return 0;
 }

结果:空格dehllloorw

使用反向迭代器可以完成逆序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{ 
   
    string str("hello world");
    sort(str.rbegin(),str.rend());
    cout<<str;
    return 0;
 }

结果:wroolllhde空格

字符串间的比较排序

#include<iostream>
#include<cstring >
#include<algorithm>
using namespace std;
int main()
{ 
   
    string a[4];
    for(int i=0;i<4;i++)
        getline(cin,a[i]);
    sort(a,a+4);
    for(int i=0;i<4;i++)
        cout<<a[i]<<endl;
    return 0;
}

三:以结构体为例的二级排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct link
{ 
   
    int a,b;
};
bool cmp(link x,link y)
{ 
   
    if(x.a==y.a)
        return x.b>y.b;
    return x.a<y.a;
}
int main()
{ 
   
    link x[4];
    for(int i=0;i<4;i++)
        cin>>x[i].a>>x[i].b;
    sort(x,x+4,cmp);
    for(int i=0;i<4;i++)
        cout<<x[i].a<<' '<<x[i].b<<endl;
    return 0;
 }

想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列

若是遇到了对结构体中的一个元素进行排序的时候,就得cmp函数来判断:
例:

struct Node { 
   
	int a;
	int b;
	int c;
};
vector<Node>p;

若是针对c排序,然后整体跟着排序:

bool cmp(Node start, Node end)
{ 
   
	return start.c < end.c;  //按着耗资来排序 
}
sort(p.begin(),p.end(),cmp);

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24499.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信