• c++ 常用排序算法 安静点


    算法简介:

    • sort //对容器内元素进行排序
    • random_shuffle //洗牌 指定范围内的元素随机调整次序
    • merge // 容器元素合并,并存储到另一容器中
    • reverse // 反转指定范围的元素

     1 sort

    功能描述:

    • 对容器内元素进行排序

    函数原型:

    • sort(iterator beg, iterator end, _Pred);

      // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置

      // beg 开始迭代器

      // end 结束迭代器

      // _Pred 谓词

    示例:

    #include <algorithm>
    #include <vector>
    
    void myPrint(int val)
    {
        cout << val << " ";
    }
    
    void test01() {
        vector<int> v;
        v.push_back(10);
        v.push_back(30);
        v.push_back(50);
        v.push_back(20);
        v.push_back(40);
    
        //sort默认从小到大排序
        sort(v.begin(), v.end());
        for_each(v.begin(), v.end(), myPrint);
        cout << endl;
    
        //从大到小排序
        sort(v.begin(), v.end(), greater<int>());
        for_each(v.begin(), v.end(), myPrint);
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    2 random_shuffle

    功能描述:

    • 洗牌 指定范围内的元素随机调整次序

    函数原型:

    • random_shuffle(iterator beg, iterator end);

      // 指定范围内的元素随机调整次序

      // beg 开始迭代器

      // end 结束迭代器

    示例:

    #include <algorithm>
    #include <vector>
    #include <ctime>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    void test01()
    {
        srand((unsigned int)time(NULL));
        vector<int> v;
        for(int i = 0 ; i < 10;i++)
        {
            v.push_back(i);
        }
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    
        //打乱顺序
        random_shuffle(v.begin(), v.end());
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    **总结:**random_shuffle洗牌算法比较实用,使用时记得加随机数种子

    3 merge

    功能描述:

    • 两个容器元素合并,并存储到另一容器中

    函数原型:

    • merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

      // 容器元素合并,并存储到另一容器中

      // 注意: 两个容器必须是有序的

      // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 // dest 目标容器开始迭代器

    示例:

    #include <algorithm>
    #include <vector>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    void test01()
    {
        vector<int> v1;
        vector<int> v2;
        for (int i = 0; i < 10 ; i++) 
        {
            v1.push_back(i);
            v2.push_back(i + 1);
        }
    
        vector<int> vtarget;
        //目标容器需要提前开辟空间
        vtarget.resize(v1.size() + v2.size());
        //合并  需要两个有序序列
        merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin());
        for_each(vtarget.begin(), vtarget.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    **总结:**merge合并的两个容器必须的有序序列

    4 reverse

    功能描述:

    • 将容器内元素进行反转

    函数原型:

    • reverse(iterator beg, iterator end);

      // 反转指定范围的元素

      // beg 开始迭代器

      // end 结束迭代器

    示例:

    #include <algorithm>
    #include <vector>
    
    class myPrint
    {
    public:
        void operator()(int val)
        {
            cout << val << " ";
        }
    };
    
    void test01()
    {
        vector<int> v;
        v.push_back(10);
        v.push_back(30);
        v.push_back(50);
        v.push_back(20);
        v.push_back(40);
    
        cout << "反转前: " << endl;
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    
        cout << "反转后: " << endl;
    
        reverse(v.begin(), v.end());
        for_each(v.begin(), v.end(), myPrint());
        cout << endl;
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    **总结:**reverse反转区间内元素,面试题可能涉及到 

  • 相关阅读:
    隐马尔可夫模型(一)
    酒罢问君三语
    Reveal使用教程
    李洪强和你一起学习前端之(8)CSS复习
    李洪强和你一起学习前端之(7)定位盒子 css可见性 滑动门案例
    李洪强和你一起学习前端之(6)浮动 布局 定位
    李洪强和你一起学习前端之(5)css书写位置 优先级和伪类
    李洪强和你一起学习前端之(4)HTML5介绍
    李洪强和你一起学习前端之(3)Css基础和选择器
    李洪强和你一起学习前端之(2)表格、表单、标签语义化
  • 原文地址:https://www.cnblogs.com/anjingdian/p/16389046.html
Copyright © 2020-2023  润新知