作者 | 铁猴

责编 | 屠敏

出品 | CSDN 博客

 简介

本文对常见排序算法进行总结。

排序算法

冒泡排序

该算法比较简单,几乎所有语言涉及到算法时,都会涉及到冒泡算法。

算法思路:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

选择排序

每次选择一个最大(小)的,直到所有元素都被输出。

可参考:https://blog.csdn.net/sun7545526/article/details/85165618

直接插入排序

插入排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止

算法思路:

当插入第i(i >= 1)时,前面的V[0],V[1],……,V[i-1]已经排好序。这时,用V[I]的排序码与V[i-1],V[i-2],…的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的元素向后顺移。

以[21,25,49,25,16,08]为例,排序过程如下所示:

在小规模数据集或是基本有序时,该算法效率较高。

希尔排序

先对数据进行预处理,使其基本有序,然后再用直接插入排序算法排序。

详细过程可参考:https://blog.csdn.net/eric_sunah/article/details/103080731

快速排序

利用“分而治之”的思想对集合进行排序

可参考:https://blog.csdn.net/sun7545526/article/details/85165742

堆排序

说堆排序前,先说下啥是堆。

堆:堆是满足下列性质的完全二叉树:

  • 每个节点都大于或是等于其左右孩子节点的值,称为大顶堆

  • 每个节点都小于或是等于其左右孩子节点的值,称为小顶堆

接下来说下堆是如何做排序的,思路如下(以大顶堆为例):

  1. 根节点是整个堆的最大值,将它移走。

  2. 将剩余n-1个节点重新构造成一个堆,再将根节点移走

  3. 重复执行1,2。直到没有节点可移动,就生成了有序序列。

该算法有两个需要解决问题:

  1. 如何将一个无序序列构建一个堆。

  2. 移除根节点后,如何用剩余的节点重建堆。

详细介绍参见:https://blog.csdn.net/eric_sunah/article/details/103081878

归并排序

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

详细介绍参见:https://blog.csdn.net/eric_sunah/article/details/103082607

总结

分类总结:

时间复杂度总结:

版权声明:本文为CSDN博主「铁猴」加入原力计划的原创文章。

- END -

如果看到这里,说明你喜欢这篇文章,请转发、点赞。扫描下方二维码或者微信搜索「perfect_iscas」,添加好友后即可获得10套程序员全栈课程+1000套PPT和简历模板向我私聊「进群」二字即可进入高质量交流群。

扫描二维码进群↓

在看 

史上最全排序算法总结!建议收藏相关推荐

  1. 史上最全排序算法总结 | 原力计划

    作者 | 铁猴 责编 | 屠敏 出品 | CSDN 博客  简介 本文对常见排序算法进行总结. 排序算法 冒泡排序 该算法比较简单,几乎所有语言涉及到算法时,都会涉及到冒泡算法. 算法思路: 比较相邻 ...

  2. 大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 (感谢礼品.红包免费送!) https://bbs.csdn.ne ...

  3. 十大经典排序算法(建议收藏)

    来自:Damonare的个人博客 原文:http://blog.damonare.cn/2016/12/20/十大经典排序算法总结(javascript描述)/ 0.算法概述  0.1 算法分类 十种 ...

  4. 史上最全数据结构算法之递归系列学习,建议收藏!

    写在前边 接下来分享的文章是关于递归的,这篇文章不单单分享递归的一切,我觉得更重要的是向每位读者传递一个思想.思想?对的,没错!这篇文章不能说包含递归的边边角角,但是通过自己的理论上的学习和实践,有了 ...

  5. android wifi 网桥,史上最全无线网桥知识,收藏这一篇就够了!

    不少朋友问关于无线网桥相关的知识,今天为大家整理一篇无线网桥知识的文章,内容都是来自互联网,小编整理编辑了一下,希望对大家有帮助. 无线网桥知识导读: 什么是无线网络: 什么是无线网桥: 无线网桥2. ...

  6. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...

    史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...

  7. python优化算法工具包_这可能是史上最全的 Python 算法集(建议收藏)

    原标题:这可能是史上最全的 Python 算法集(建议收藏) 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...

  8. 这可能是史上最全的Python算法集!

    来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点:选择了在实践中广泛应用的算法:依赖最少:容易阅读,容易理解每个 ...

  9. python算法动画_这可能是史上最全的Python算法集!

    来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点:选择了在实践中广泛应用的算法:依赖最少:容易阅读,容易理解每个 ...

最新文章

  1. 17个Python小窍门
  2. 在cmd环境下操作Oracle11g数据库
  3. 【转载】C/C++中long long与__int64的区别
  4. 93后阿里P7晒出工资单:原来是狠补了这个~真香
  5. P4777 【模板】扩展中国剩余定理(EXCRT)
  6. JavaSE--类与对象
  7. Filter过滤指定ip地址
  8. 西门子触摸屏脚本程序_新手请收藏,超详细的西门子触摸屏设置与编程图文教程...
  9. 使用XShell通过Linux跳板机连接内网服务器
  10. [深度学习] - 网络模型训练过程的 loss 变化分析 (loss / val_loss / test_loss)
  11. “药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(仿手机键盘26键设计,密码支持英文大写+英文小写+数字)
  12. 王微:愤怒,是我创业初始的驱动力
  13. 噁二唑和三唑衍生物(PXZ-OXD, 2PXZ-OXD,2PXZ-TAZ,PXZ-TAZ)
  14. 声网AI降噪测评系统初探
  15. oss文档存储类型:低频、标准、归档、冷归档
  16. 使用zepto.js完成的手机相册
  17. 图解时间自适应卷积----Time-aware Large Kernel Convolutions
  18. 物联网技术下的无人便利店风口已形成
  19. THESEUS-FE | 电动汽车热管理
  20. 【C语言】求一个字符串的长度,不要使用strlen()函数

热门文章

  1. 分析与设计(AD)简介(1)
  2. 全球缺芯大潮中,以软代硬能否另辟蹊径?
  3. 滴滴AI Labs负责人叶杰平离职!CTO 张博接任
  4. “Python之父”从Dropbox退休
  5. Kaggle Days首次落地中国,日本团队拿下冠军
  6. 冠军奖3万元!CSDN×易观算法大赛开赛啦
  7. 触类旁通,经典面试题最长公共子序列应该这么答
  8. 儿科医生的眼泪,全被数据看见了
  9. AI做不了“真”3D图像?试试Google的新生成模型
  10. 在看不见的地方,AI正在7×24为你在线服务