排序算法总结:实现原理,时间复杂度,使用场景,稳定度。

冒泡排序的实现原理:比较简单,不做叙述。

稳定性: 稳定

使用场景:适用于n较小的情况。

选择排序的实现原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

稳定性:不稳定。比如序列5 8 5 2 9,第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

使用场景:适用于n较小的情况。运行时间和输入无关。

插入排序的实现原理:

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

稳定性:稳定

最好情况:本就是有序序列。

使用场景:数据量小时使用。并且大部分已经被排序。

归并排序的实现原理:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

稳定性:稳定

使用场景:如果需要稳定,空间不是很重要,就选择归并排序。

快速排序的实现原理:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

稳定性:不稳定

最坏情况:

使用场景:是最快的通用排序算法,大多数使用情况下,是最佳选择。

堆排序:

堆排序稳定性
堆排序是不稳定的算法,它不满足稳定算法的定义。它在交换数据的时候,是比较父结点和子节点之间的数据,所以,即便是存在两个数值相等的兄弟节点,它们的相对顺序在排序也可能发生变化。

计数排序的实现原理:

稳定性:稳定

当输入的元素是 n 个 0到 k 之间的整数时,时间复杂度是O(n+k),空间复杂度也是O(n+k),其排序速度快于任何比较排序算法。当k不是很大并且序列比较集中时,计数排序是一个很有效的排序算法

桶排序:

实现原理:它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。

桶排序最好情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。但相应的空间消耗就会增大。

(1)若n较小(如n≤50),可采用直接插入或直接选择排序。

当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。

(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。

快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的  排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。

有些内容来自于其他人的博客,自己的纸质笔记。

常见排序算法总结(实现原理,稳定度,使用场景,时间复杂度)相关推荐

  1. 常见排序算法的最好、最坏、平均时间复杂度以及空间复杂度

    文章目录 思考 前言 如何分析一个排序算法? 排序算法的执行效率 排序算法的内存消耗 排序算法的稳定性 如何选择合适的排序算法? 如何优化快速排序? 解答思考题 参考链接 思考 为什么插入排序比冒泡排 ...

  2. 常见排序算法的最好、最坏、平均时间复杂度、稳定性、是否基于比较

    先看表格 分类 算法 时间复杂度 空间复杂度       稳定性           关联性        最好          最差        平均       插入排序        直接插 ...

  3. 常见排序算法的原理与实现(js)

    常见排序算法通常需要通过比较来确定次序(比较类排序):由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 各类排序算法的特点: 术语解释: 时间复杂度:对排序数据的总的操作次数 ...

  4. ++代码实现 感知机的原理_常见排序算法原理及JS代码实现

    来源:SegmentFault 思否社区 作者:Warren 本文只是将作者学习的过程以及算法理解进行简单的分享,提供多一个角度的理解说明,或许让你的困惑能得以解决(代码或说明若有问题,欢迎留言.联系 ...

  5. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  6. python常见排序算法解析

    python--常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分 ...

  7. 十种常见排序算法欢聚一堂

    文章目录 1.常见排序算法分类 2.非线性时间比较类排序 2.1 交换类排序 2.1.1 冒泡排序 2.1.2 快速排序 2.2 插入类排序 2.2.1 直接插入排序 2.2.2 Shell 排序 2 ...

  8. 【十种常见排序算法】

    十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序 ...

  9. php常见排序算去,PHP兑现常见排序算法

    PHP实现常见排序算法 //插入排序(一维数组) function insert_sort($arr){ $count = count($arr); for($i=1; $i $tmp = $arr[ ...

  10. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

最新文章

  1. 服务器可以响应字符类型的数据吗,HTTP - Response
  2. 分布式架构探索 - 2. WebService RPC框架之Apache CXF
  3. python如何训练模型生产_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...
  4. confluence 卡顿原因总结
  5. windows套接字IOCP模型
  6. oracle 根据spid查sql,探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句...
  7. 应用中心最佳实践之——使用应用组完成多集群一键部署
  8. Linux Shell脚本_历史命令显示操作时间
  9. pycharm在linux安装插件,Pycharm安装go插件,开始go之旅
  10. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)
  11. “仿宋_GB2312、楷体_GB2312、方正小标宋简体”的下载和安装方式【实操】
  12. 基于SSM的毕业生就业管理系统设计与实现 Java mysql
  13. Linux debian解压和压缩.rar文件教程
  14. 用Python绘制当前日期
  15. java微信公众号开发一:服务器信息配置
  16. php 微信模拟登陆给用户发送消息(文字,图片,图文)
  17. 发现ramnit样本一枚
  18. 技术分享 | 使用 Zabbix + Grafana 搭建服务器监控系统
  19. Vue routers
  20. HTML辅助下载个人官网源码+UI非常不错

热门文章

  1. matplotlib可视化之饼图plt.pie()与plt.legend()中bbox_to_anchor参数的理解
  2. 12-属性动画源码分析
  3. Java 开发最容易写的 10 个bug
  4. kubernetes 与 rook 架构说明
  5. Android 手势操作GestureDetector
  6. nn.Upsample
  7. 【机器学习】贝叶斯分类三大实战项目:高斯模型进行疾病诊断、多项式模型进行文本分类、伯努利模型进行好/差评判别
  8. PS使得背景变成白色但是使得黑色字体颜色加深
  9. 遭遇裁员,如何渡过心理危机?
  10. 如皋中学2021高考成绩查询,喜报!如皋八所高中高考成绩公布