暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

浅谈STL中sort函数用法——快排

小呆树屋 2021-09-12
1447

    

    上回书说道,对于一个数组而言,在目前阶段最优的排序算法是快排。但是快速很长,在每一次使用时候都要重新书写一遍,并不方便我们使用。这时候,c++中的STL(标准模板库)就派上用场了,他可以极大的减轻我们的工作量。如果不了解基础排序算法的,欢迎点击了解更多基础排序算法入门教程

    这一篇文章就会详细的讲解STL里面sort函数的用法,来帮助我们完成任务。



简单介绍一下STL

    STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。

    总的来说,STL里面包含以下内容


组件描述

容器

(Containers)

容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。

算法

(Algorithms)

算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。

迭代器

(iterators)

迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。

    这三个组件中都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。


sort函数的基本原理

    sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择推排序。


sort的基本用法

    sort函数的基本形式:     

    sort(first_pointer,first_pointer+n,cmp)

    sort可以给数组,或者链表list、向量排序。要使用sort函数,首先必须要引入标准库<algorithm>

    #include <algorithm>

        这个函数有三个参数,第一个为参数的首地址,第二个为首地址加上数组的n,代表尾地址的下一地址;第三个为排序规则,默认可以不填,可以声明函数改变排序的规则,如升序改为降序等等;


    用法一:对函数进行升序排列

        使用sort函数可以对数组进行升序排列,书写一段简单的代码,我们观察一下结果

      #include<bits/stdc++.h> 
      using namespace std;
      int main(){
      int a[5]={4,6,7,3,1};
      sort(a,a+5);
      for(int i=0;i<5;i++){
      cout<<a[i];
      }
      return 0;
      }

          可以看到,数组按照次序规则升序排列了。

          那么假如我想要对数组的内容进行降序排列,又该怎么办呢?


      用法二:对函数进行降序排列

          在上文的代码中稍微改动一下,利用前文中所提到的排序规则,我们很容易写出了以下的代码。

        #include<bits/stdc++.h> 
        using namespace std;
        bool cmp(int a,int b){
        return a>b;
        }


        int main(){
        int a[5]={4,6,7,3,1};
        sort(a,a+5,cmp);
        for(int i=0;i<5;i++){
        cout<<a[i];
        }
        return 0;
        }

            在这段代码中,我们新增加了一个bool函数cmp,用来自定义sort排序规则。


        用法三:对结构体进行排列

                类似的,运用自定义排列的规则,我们可以很轻松对于结构体排列

          #include<bits/stdc++.h> 
          using namespace std;
          struct test{
          int id,number;
          }Test[1000];


          bool cmp(test a, test b){
          return a.number<b.number;
          }


          int main(){
          int n;
          cin>>n;
          for(int i=0;i<n;i++){
          Test[i].id=i+1;
          cin>>Test[i].number;
          }
          sort(Test,Test+n,cmp);
          for(int i=0;i<n;i++){
          cout<<Test[i].id<<" "<<Test[i].number<<endl;
          }
          return 0;
          }

              



              总结下来,STL中sort函数还是比较简单且基础的,在日常中还是要多多练习。

          文章最后祝大家学业有成,不断进步

          如果觉得写的好欢迎点个赞



          文章转载自小呆树屋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论