C++ sort排序函数用法

C++ sort排序函数用法最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数用法1、sort函数可以三个参数也可以两个参数,必须的头文件#include和usingnamespacestd;2、它使用的排序方法是类似于快排的方法,时间复

大家好,又见面了,我是你们的朋友全栈君。

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数

用法

1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std;
2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)

3、Sort函数有三个参数:(第三个参数可不写)

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

两个参数用法

#include <iostream>
#include <algorithm>
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);
 for(i=0;i<20;i++)
 cout<<a[i]<<endl;
 return 0;
}

输出结果是升序排列。(两个参数的sort默认升序排序)


三个参数

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }//升序排列
bool myfunction2 (int i,int j) { return (i>j); }//降序排列

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
    int myints[8] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
    //std::sort (myints,myints+8,myfunction);不用vector的用法
    
  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)//输出
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

string 使用反向迭代器来完成逆序排列

#include <iostream>
using namespace std;
int main()
{
     string str("cvicses");
     string s(str.rbegin(),str.rend());
     cout << s <<endl;
     return 0;
}
//输出:sescivc
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132002.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 音乐播放器源代码(免费复制)「建议收藏」

    音乐播放器源代码(免费复制)「建议收藏」音乐播放器源代码(免费复制)

    2022年6月26日
    63
  • DELL服务器数据恢复成功案例「建议收藏」

    DELL服务器数据恢复成功案例「建议收藏」DELLEqualLogicPS6100采用虚拟ISCSISAN阵列,为远程或分支办公室、部门和中小企业存储部署带来企业级功能、智能化、自动化和可靠性。以简化的管理、快速的部署及合理的价格满足了分支办公室和中小企业的存储需求,同时提供全套企业级数据保护和管理功能、可靠的性能、可扩展性和容错功能,是中型企业级存储的起点产品,但某些物理故障或其他操作都可能会对卷或存储造成破坏,因此对系列存储的数…

    2022年6月30日
    26
  • zimbra OUTLOOK 收发邮件-ERR only valid after entering TLS mode

    zimbra OUTLOOK 收发邮件-ERR only valid after entering TLS mode

    2021年5月11日
    143
  • UE4 Slate三 SlateUI代码讲解

    UE4 Slate三 SlateUI代码讲解原创文章,转载请注明出处。点击观看上一篇《UE4Slate二用UMG思想去理解Slate+Slate编码》点击观看下一篇《UE4Slate四SlateUI如何做动画》虚幻引擎SlateUI介绍1>前言2>该继承自哪个基类来写呢?SCompoundWidget/SPanel/SLeafWidget2.1>基类:SUserWidget或者是SCompoundWidget2.2>基类:SPanel2.3>基类:SLeafWidget3>该如何新建一个S类组件呢.

    2022年10月4日
    2
  • 振荡周期、时钟周期、机器周期、指令周期的区别与联系[通俗易懂]

    振荡周期、时钟周期、机器周期、指令周期的区别与联系[通俗易懂]以下内容均来自网上查找,并根据个人理解进行整理,刚开始学习单片机,如有不对的地方敬请指正。先给出结论:一个振荡周期=一个时钟周期;一个时钟周期=一个机器周期;一个机器周期=六个状态周期;一个状态周期=两个节拍;一个节拍=一个时钟周期;一个指令周期=N个机器周期;综上:1个指令周期=N个机器周期=6N个状态周期=12N个节拍=12N个时钟周期=12N个振荡周期时钟周期:一个脉冲所需…

    2022年10月13日
    3
  • byte数组拼接[通俗易懂]

    byte数组拼接[通俗易懂]/** *拼接byte数组 *@paramdata1 *@paramdata2 *@return拼接后数组 */ publicstaticbyte[]addBytes(byte[]data1,byte[]data2){ byte[]data3=newbyte[data1.length+data2.length]; System.arraycopy(data1,0,data3,0,data1.length)..

    2022年6月12日
    32

发表回复

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

关注全栈程序员社区公众号