详细聊一聊algorithm中的排序算法

 更新时间:2022年06月17日 11:58:13   作者:秋名山码民  
<algorithm>是C++标准程序库中的一个头文件,定义了C++ STL标准中的基础性的算法(均为函数模板),下面这篇文章主要给大家介绍了关于algorithm中排序算法的相关资料,需要的朋友可以参考下

前言

雨下不停,爱意难眠,说一下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一个对象出来

到此这篇关于algorithm中排序算法的文章就介绍到这了,更多相关algorithm排序算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++11 并发指南之std::mutex详解

    C++11 并发指南之std::mutex详解

    这篇文章主要介绍了C++11 并发指南之std::mutex详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • CFileDialog设置多选的问题解决

    CFileDialog设置多选的问题解决

    前几天同事问我在CFileDialog中多选时按确定按钮后DoModal函数的返回值是IDCANCEL的问题解决
    2013-02-02
  • 详解C语言中的wait()函数和waitpid()函数

    详解C语言中的wait()函数和waitpid()函数

    这篇文章主要介绍了C语言中的wait()函数和waitpid()函数,注意其在中断进程方面用法的不同,需要的朋友可以参考下
    2015-08-08
  • C++11 thread多线程编程创建方式

    C++11 thread多线程编程创建方式

    这篇文章主要介绍了C++11 thread多线程编程的相关知识,包括线程的创建方式结束方式及互斥锁的实例代码详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C/C++经典杨辉三角问题解决方案

    C/C++经典杨辉三角问题解决方案

    杨辉三角形,又称帕斯卡三角形、贾宪三角形、海亚姆三角形,它的排列形如三角形。本文将为大家介绍通过C++/C语言实现打印杨辉三角形的示例代码,需要的可以参考一下
    2023-02-02
  • C语言中多样式的格式控制符的使用详解

    C语言中多样式的格式控制符的使用详解

    C语言中的格式控制符类型繁多,虽然格式字符可能就那么几个,但组合起来使得格式控制符变得多样化,这对于C语言初学者来说无疑是一种痛苦,为此我将常见的格式控制符类型及意义总结一下,希望对大家有所帮助
    2023-03-03
  • C++详细讲解图的遍历

    C++详细讲解图的遍历

    图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历
    2022-05-05
  • C语言的三种条件判断语句你都了解吗

    C语言的三种条件判断语句你都了解吗

    这篇文章主要为大家详细介绍了C语言的三种条件判断语句,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C语言实现学生成绩管理系统课程设计

    C语言实现学生成绩管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现学生成绩管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C++面向对象之类和对象那些你不知道的细节原理详解

    C++面向对象之类和对象那些你不知道的细节原理详解

    C++是面向对象编程的,这也是C++与C语言的最大区别,下面这篇文章主要给大家介绍了关于C++面向对象之类和对象的细节原理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05

最新评论