10种排序算法基础总结
基于比较的排序:
基础排序:
冒泡排序:谁大谁上,每一轮都把最大的顶到天花板 效率太低——掌握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种排序算法基础总结相关推荐
- 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)
本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...
- 17种编程语言+10种排序算法
开源地址 https://gitee.com/lblbc/simple-works/tree/master/sort 覆盖语言:C.C++.C#.Java.Kotlin.Dart.Go.JavaScr ...
- 常见的10种排序算法
前言 排序算法是在生活中随处可见,也是算法基础 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比 ...
- 10种 排序算法 稳定性,复杂度的分析
排序相关概念 排序项:排序依据的数据 关键码:主关键码,次关键码,主关键码对于任意排序的序列结果唯一,关键码是次关键码排序结果不一定唯一,由于才可能存在相同的关键值记录. 内部排序:排序过程中全放入内 ...
- Java面试宝典系列之基础面试题-常见的几种排序算法-插入、选择、冒泡、快排、堆排等
常见的几种排序算法-插入.选择.冒泡.快排.堆排: https://blog.csdn.net/zhangerqing/article/details/8831542
- 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)
10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...
- Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等
本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...
- 归并排序改良 java_Java 八种排序算法总结
image 前言 好久没复习基础了,写个冒泡排序都要想一会.感觉自己好像老了好多,今天手痒总结一下排序算法.目前网上博客普遍都有详细介绍,写的很清楚.说实话我是没必要再写一遍的,感觉就是在啰嗦.还是重 ...
- Java常用的八种排序算法与代码实现
在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...
最新文章
- Keep 再融资以后
- SpringBoot + WebMagic实现一个的爬虫框架
- 更新暂停,计划十一后继续
- memest函数用法说明(转自Lee.Kevin)
- Qt Creator使用灯光
- 《leetcode》two-sum
- 用ABAP代码实现从1累加到100
- 【uni-app】使用定义在App.vue的方法
- 三机齐发!五大全球首发的“安卓机皇”4999元起,“安卓之光” 5999元起
- ip头ttl_TCP/IP协议详解内容总结,看完恍然大悟
- Linux安装PHP curl拓展
- 电商后台管理系统分享
- java 进制转换十进制
- 高防服务器如何防御?
- 使用 Nginx 部署前后端分离项目,解决跨域问题
- 程序员面试之九阴真经
- 尚硅谷--Linux篇
- USB UVC实战笔记第1篇—UVC设备枚举过程详细分析
- 关于解决win10的 tencent qqmail plugin 卸载不了的问题
- Verilog左移位