写点什么

algorithm 中的排序算法详解

作者:秋名山码民
  • 2022 年 5 月 10 日
  • 本文字数:1501 字

    阅读完需:约 5 分钟

前言

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

一、algorithm 是什么?

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

二、有哪些排序算法?

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


  1. sort

  2. random_shuffle

  3. merge

  4. 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 一个对象出来😂,哎哟,不错哦! 欢迎三连支持!

发布于: 刚刚阅读数: 2
用户头像

卷不死,就往…… 2021.10.19 加入

2019NOIP退役成员,华为云享专家,阿里云专家博主,csdn博主,努力进行算法分享,有问题欢迎私聊

评论

发布
暂无评论
algorithm中的排序算法详解_算法_秋名山码民_InfoQ写作社区