基于比较的排序:

  基础排序:

      冒泡排序:谁大谁上,每一轮都把最大的顶到天花板 效率太低——掌握swap。

    选择排序:效率较低,但经常用它内部的循环方式来找最大值和最小值。

    插入排序:虽然平均效率低,但是在序列基本有序时,它很快,所以也有其适用范围。

    希尔排序(缩小增量排序):是插排的改良,对空间思维训练有帮助 时间复杂度O(n1.3),介于O(nlgn)~O(n2)之间

  分治法:

    快速排序:是软件工业中最常见的常规排序法,其双向指针扫描和分区算法是核心,特别地partition算法用来划分不同性质的元素,如选择第K大元素的问题。快速排序时间复杂度为O(NlgN),但是如果主元不是中位数的话,特别地如果每次主元都在数组区间的一侧,复杂度将退化为N²,工业上的优化方法见快速排序分区以及优化方法。快速排序重视子问题的划分。

    归并排序:分治法的完美使用,开辟了辅助空间,常见的题目如逆序对数,归并排序重视子问题的解的合并

    堆排序:用到了二叉堆数据结构,是继续掌握树结构的起手式 堆排序  = 插排 + 二分查找

    上面三个都是NlgN的复杂度,其中快排表现最好,是原址的不用开辟辅助空间;归并排序需要开辟辅助空间;堆排也是原址的,但是常数因子较大,不具备优势。

基于非比较排序:

  计数排序:可以说是最快的,用它来解决问题时必须注意如果序列中的值分布非常广(最大值很大,元素分布很稀疏),那么空间将会浪费很多,所以计数排序的使用范围是:序列的关键字比较集中,已知边界,且边界较小。

  桶排序:用它解决问题必须注意序列的值是否均匀地分布在桶中。如果不均匀,那么个别桶中的元素会远多于其他桶,桶内排序用比较排序,极端情况下,全部元素在一个桶内,那么复杂度还是会退化成NlgN。

  基数排序:kN级别(k是最大数的位数)是整数数值型排序里面又快又稳的,无论元素分布如何,只开辟固定的辅助空间(10个桶),基数排序几乎不需要任何“比较”操作。因此,在实际应用中,对十进制整数来说,基数排序更好用。

  上面三种排序其实都是支持负数的,我们可以找出最小的数来,计算出与0的距离,然后把所有的数同时减去这个距离,这样就全部成为自然数,排好序然后再恢复回去就OK了。

十种排序算法对比:

  

转载于:https://www.cnblogs.com/xiaoyh/p/10286280.html

10种排序算法基础总结相关推荐

  1. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  2. 17种编程语言+10种排序算法

    开源地址 https://gitee.com/lblbc/simple-works/tree/master/sort 覆盖语言:C.C++.C#.Java.Kotlin.Dart.Go.JavaScr ...

  3. 常见的10种排序算法

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

  4. 10种 排序算法 稳定性,复杂度的分析

    排序相关概念 排序项:排序依据的数据 关键码:主关键码,次关键码,主关键码对于任意排序的序列结果唯一,关键码是次关键码排序结果不一定唯一,由于才可能存在相同的关键值记录. 内部排序:排序过程中全放入内 ...

  5. Java面试宝典系列之基础面试题-常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    常见的几种排序算法-插入.选择.冒泡.快排.堆排: https://blog.csdn.net/zhangerqing/article/details/8831542

  6. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

  7. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  8. 归并排序改良 java_Java 八种排序算法总结

    image 前言 好久没复习基础了,写个冒泡排序都要想一会.感觉自己好像老了好多,今天手痒总结一下排序算法.目前网上博客普遍都有详细介绍,写的很清楚.说实话我是没必要再写一遍的,感觉就是在啰嗦.还是重 ...

  9. Java常用的八种排序算法与代码实现

    在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...

最新文章

  1. Keep 再融资以后
  2. SpringBoot + WebMagic实现一个的爬虫框架
  3. 更新暂停,计划十一后继续
  4. memest函数用法说明(转自Lee.Kevin)
  5. Qt Creator使用灯光
  6. 《leetcode》two-sum
  7. 用ABAP代码实现从1累加到100
  8. 【uni-app】使用定义在App.vue的方法
  9. 三机齐发!五大全球首发的“安卓机皇”4999元起,“安卓之光” 5999元起
  10. ip头ttl_TCP/IP协议详解内容总结,看完恍然大悟
  11. Linux安装PHP curl拓展
  12. 电商后台管理系统分享
  13. java 进制转换十进制
  14. 高防服务器如何防御?
  15. 使用 Nginx 部署前后端分离项目,解决跨域问题
  16. 程序员面试之九阴真经
  17. 尚硅谷--Linux篇
  18. USB UVC实战笔记第1篇—UVC设备枚举过程详细分析
  19. 关于解决win10的 tencent qqmail plugin 卸载不了的问题
  20. Verilog左移位

热门文章

  1. hdu6165(拓扑排序+tarjan缩点)
  2. 网络号、主机号、子网号、子网掩码、子网划分
  3. 【poj3734】矩阵乘法求解
  4. 如何再发行 SAPI 5.1 核心组件
  5. ZOJ 1049 2^x mod n = 1
  6. jQuery ready(fn) 页面载入函数
  7. 让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的代码
  8. 安装配置JDK和Eclipse的步骤
  9. vue 页面跳转的两种方式
  10. CentOS 7 下 Zeal 安装