目录
  • 前言
  • 一、algorithm是什么?
  • 二、有哪些排序算法?
    • sort
    • random_shuffle
    • merge
    • reverse
  • 总结

    前言

    雨下不停,爱意难眠,说一下algorithm中的几个排序算法吧,干什么总要排个序吧,有单纯排序的算法题可以看一下,我写的码神说排序算法不多说了,来看吧,系好安全带,发车了!

    一、algorithm是什么?

    如果说algorithm是个什么东西的话,百度百科是这样说的,算法(algorithm),也如其名,这就是一个算法的头文件,如果展开了来说的话,可能国庆假期都不够我写的,所以说本文我们主要来说algorithm中的排序算法

    二、有哪些排序算法?

    大致我想到的是以下的几个排序算法,欢迎补充

    • sort
    • random_shuffle
    • merge
    • reverse

    sort

    根据使用的优先级来说的话,sort是在开发或者竞赛中都比较常用的排序算法,在默认的情况下,他是从小到大的排序,先来看他的默认情况吧。

    #include<iostream>
    #include<cstdio>
    #include<vector>//用vector容器来存储
    #include<algorithm>//算法头文件
    using namespace std;
    void myprint(int rel)
    {
        cout << rel;
    }
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
        //插入
        sort(v.begin(), v.end());
        //从小到大
        for_each(v.begin(), v.end(), myprint);
        //遍历输出
    }
    int main()
    {
        test01();
        return 0;
    }
    

    实现sort从大到小的排序算法有以下俩种

    sort(v.begin(), v.end(), greater<int>());
    //用greater,其中greater表示内置类型从大到小排序,
    //less表示内置类型从小到大排序。
    
    //自定义函数来进行输出
    bool getor(int v1, int v2)
    {
    	return v1 > v2;
    }
    sort(v.begin(), v.end(), getor);
    

    random_shuffle

    random随机的,从名字我们可以猜出,这是一个打乱排好的序,从而实现随机的算法,我也喜欢把它看成一个洗牌的过程,故曰:洗牌排序,看一下实现吧。

    //洗牌排序,打乱随机分配
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    void myprint(int val)
    {
        cout << val << " ";
    }
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
        random_shuffle(v.begin(), v.end());
        for_each(v.begin(), v.end(), myprint);
    }
    int main()
    {
        test01();
        return 0;
    }
    

    merge

    作用:俩个容器合并,并存储到另外一个容器中

    条件:

    1.俩个容器必须是有序的,所以可以用sort排序,排一下序

    2.记得要给一个新数组分配内存

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    void myprint(int val)
    {
    	cout << " " << val;
    }
    void test01()
    {
    	vector<int>v;
    	vector<int>v1;
    	for (int i = 0; i < 10; i++)
    	{
    		v.push_back(i);
    		v1.push_back(i + 1);
    	}
    	vector<int>vTarget;
    	//归并
    
    	//要提前分配内存
    	vTarget.resize(v.size() + v1.size());
    	merge(v.begin(), v.end(), v1.begin(), v1.end(), vTarget.begin());
    	for_each(vTarget.begin(), vTarget.end(), myprint);
    }
    int main()
    {
    	test01();
    	return 0;
    }
    

    reverse

    反转,正好用它再来输出一次从大到小的排序

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    void myprint(int val)
    {
    	cout << " " << val;
    }
    void test01()
    {
    	vector<int>v;
    	for (int i = 0; i < 10; i++)
    	{
    		v.push_back(i);
    
    	}
    	reverse(v.begin(), v.end());
    	for_each(v.begin(), v.end(),myprint);
    }
    int main()
    {
    	test01();
    	return 0;
    }
    

    总结

    我能在algorithm中想到的排序函数就这些了,如果缺少哪些,欢迎补充,码神与你们一起变强,一起去new一个对象出来

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。