• 【排序函数讲解】sort-C++


    c++标准库里的排序函数,用于对给定区间所有元素进行排序。头
    文件是#include
    使用 Sort()在具体实现中规避了经典快速排序可能出现的、会导
    致实际复杂度退化到 o(n²)的极端情况。它根据具体情况使用不
    同排序方法,效率极高。
    sort 函数基本格式:
    sort(首元素地址,尾元素地址的下一个地址,比较函数);
    说明:排序方法可以是从大到小也可是从小到大,还可以不写第三
    个参数,此时默认的排序方法是从小到大排序。
    举例:下面就具体使用 sort()函数结合对数组里的十个数进行排
    序做一个说明。
    例一:sort 函数没有第三个参数,实现的是从小到大

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

    例二:从大到小排序
    需要加入一个比较函数 cmp()

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

    程序如下:

       #include<iostream>
        #include<algorithm>
        using namespace std;
        bool cmp(int a,int b)
        {
       	 return a>b;
        }
        int main()
        {
       	 int a[10]={9,6,3,8,5,2,7,4,1,0};
      	  for(int i=0;i<10;i++)
       	 cout<<a[i]<<endl;
       	 sort(a,a+10,cmp);//在这里就不需要对 cmp 函数传入参数了,这是规则
        
      	 for(int i=0;i<10;i++)
            	cout<<a[i]<<endl;
            return 0;
            }
    

    例三:对结构体数据排序
    假设自己定义了一个结构体 node

    struct node
    {
    	int a;
    	int b;
    	double c;
    }
    

    有一个 node 类型的数组 node arr[100],想对它进行排序:先按 a
    值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,
    就按 c 降序排列。就可以写这样一个比较函数:
    以下是代码片段:

    bool cmp(node x,node y)
    {
    	if(x.a!=y.a) return x.a<y.a;
    	if(x.b!=y.b) return x.b>y.b;
        return x.c>y.c;
    }
    

    例四:对字符串的排序
    如:

    string str[5]={“bbb”,”abc”,”cc”,”b”,”aaaa”};
    sort(str,str+5);
    for (int i=0;i<5;i++)
     cout<<str[i]<<endl;
    //依次输出 aaaa,abc,b,bbb,cc
    

    但是,如果是想按字符串的长度对 str 进行递增排序,则先定义
    cmp 函数再调用。

    bool cmp(string str1,string str2)
    {
        return str1.length()<str2.length();
    }
    

    调用:sort(str,str+5,cmp);
    输出:

    for(int i=0;i<5;i++)
    	cout<<str[i]<<endl;
    

    //依次输出 b,cc,bbb,abc,aaaa

    另外,在部分题目中会看到以下字样:对*****,按输入的顺序输出。
    由于sort在排序过程中不是很稳定,如果有诸如此类的要求,请把sort替换成stable_sort,即稳定排序。(如果考试禁用请无视)

    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    Iis发布网站
    call和apply的用法和区别
    用脚手架搭建vue项目
    记录一键shell脚本清理MySQL碎片文件的脚本
    Tiny File Manager – 轻便PHP文件管理工具 WEB文件可视化管理文件
    Pure Highlightjs – WordPress站长必装轻便代码高亮插件
    6个实用方法有效确保WordPress网站数据安全
    WPOSS – WordPress阿里云对象存储OSS插件 网站图片分离加速
    WordPress安装WPCOS插件分离图片至腾讯云对象存储加速网站
    Autoptimize – WordPress压缩代码加速网站访问插件设置方法
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11167786.html
Copyright © 2020-2023  润新知