排序算法
文章平均质量分 84
数据结构算法中,算法的一个分类
it_lihongmin
不要觉得自己怎么样,现实就是比你厉害的人,比你更努力!
当才华撑不起自己野心的时候,老老实实地踏实学习吧!
展开
-
排序算法 - 堆排序
堆排序也是时间复杂度为O(N*logN)的排序算法,排序包括堆化和排序两个过程。前一篇博客我们分析了堆的两个重要操作,也分析了Java PriorityQueue的源码。新增元素时会进行从下往上的堆化过程,而移除堆顶元素时将叶子节点的最后一个元素顶替堆顶元素,然后执行从上下到的堆化操作。而堆排序中的建堆操作就是将元素挨个添加到堆中,即从上到下的堆化操作。前面分析了同样的数据,满足堆的条件可以有多种情况,可以认为排好序后的是堆的唯一一种情况。如下图(中间的情况就是排序好的堆): 堆...原创 2021-03-07 23:16:28 · 372 阅读 · 0 评论 -
排序算法 - Collections.sort涉及的排序算法源码分析
前面涉及到了那么多时间复杂度分类的排序算法,冒泡排序、插入排序、选择排序;归并排序、快速排序; 桶排序、计数排序、基数排序,可能常用的排序可能还有堆排序等。了解了每种排序算法的最好最坏平均时间复杂度,空间复杂度(是否原地排序),是否稳定排序等,这些可以理解为都是理论,当我们真正落地使用时会使用哪些排序,现在分析一下Java中涉及的排序算法,进行源码分析。...原创 2021-03-03 17:19:12 · 1315 阅读 · 3 评论 -
排序算法 - 桶排序、计数排序、基数排序(线性排序算法)
目录1、桶排序(Bucket Sort)2、计数排序(Counting Sort)3、基数排序(Radix Sort) 醒目一点: 桶排序、计数排序、基数排序可以看作是线性排序算法,从时间复杂度看远高于归并、快排等,但是这些排序算法对数据的要求非常高,并不能作为常规的排序算法。即特别是类似开发一个排序工具类,需要适应所以特征的数据的排序,显然是不行的。 1、桶排序(Bucket Sort)2、计数排序(Counting Sort)3、基...原创 2021-03-03 13:45:54 · 407 阅读 · 0 评论 -
排序算法 - 时间复杂度O(N*logN)的归并、快速排序算法
归并排序、快速排序都使用了分治的思想,时间复杂度都是O(N*logN)。由于其时间复杂度低,所以被广泛的应用,比如Java Collection.sort; Mysql数据库中的排序;Tim排序等。原创 2021-03-03 00:47:39 · 1267 阅读 · 0 评论 -
排序算法 - 二分插入排序、希尔排序(插入排序的优化)
目录1、二分插入排序2、希尔排序 上一篇博客分析了时间复杂度为O(N²)的三种排序方式,并且基于稳定特性的插入排序和冒泡排序做了性能对比,当数据量级比较小的使用经常会选择插入排序。然而插入排序本身还可以进行优化,让其性能进一步提升,二分插入排序和希尔排序都是在普通插入排序的基础上进一步优化。1、二分插入排序 插入排序本身就是往后遍历,每次轮训都会把前N个元素排好序,然后再将N+1个元素插入已经排好序的“子数组”里面。直接插入排序判断往哪个下标位置插入时,是遍历了整个子数组,在...原创 2021-03-02 15:30:09 · 1100 阅读 · 0 评论 -
排序算法 - 时间复杂度O(N²)的冒泡、插入、选择排序
目录1、冒泡排序2、插入排序3、选择排序4、为什么很多排序工具使用插入排序而非冒泡排序? 排序是算法中比较常用的一大块,很多的场景都需要进行排序操作,而排序选择不当可能造成千、万被的性能差距。所以按照时间复杂度将排序算法进行分类,只是排序时间复杂度只是衡量数据规模趋势与耗时的关系,如果只是基于时间复杂度进行考虑那么时间复杂度高的基本就不会使用了。大O时间复杂度分析忽略了常数、系数、低阶等,然而在数据量比较小的情况下,可能常数等的值比较大,耗时完全超过了递增的趋势值,所以一个优秀的排..原创 2021-03-02 10:29:15 · 974 阅读 · 0 评论