![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
热爱健体的程序猿
这个作者很懒,什么都没留下…
展开
-
逆序对问题
逆序对问题:在一个数组中,左边的数如果比右边的数大,则折两个数构成一个逆序对,请打印所有逆序对刚刚看完左神的算法视频,对逆序对问题很快就有了思路,采用归并排序来解决问题,在每次的合并时判断合并集合左边是否比右边的数大如果比左边的大就打印出来。如果右边集合合并完了而左边集合还没合并完,说明左边剩余元素都比右边大,所以打印出左边所有剩余元素和右边的所有元素组成的逆序对。代码如下:public c...原创 2019-03-20 16:10:50 · 793 阅读 · 1 评论 -
快速排序及优化,堆排序总结(上)
大二时候学的快排和堆排现在忘的差不多了。。。重新学习了下快排并根据左神的视频进行了优化经典快排是以最后一个元素作为基准点,随机快排是从集合中随机选择一个数和最后一个元素交换作为基准点,因此经典快排和随机快排的代码相差不大,但是随机快排的复杂度是通过期望得到的,是个概率上的复杂度,运用的更广泛。优化后的快排主要是参考了荷兰国旗问题,将和基准数相等的数归为一类,这样在接下来的排序中,与基准数相同的...原创 2019-03-20 19:18:42 · 246 阅读 · 0 评论 -
快速排序及优化,堆排序总结(下)
堆排序是建立在完全二叉树的结构上进行排序的,每次将大根堆的顶部和最后一个元素进行交换,因为大根堆的顶部元素肯定是堆中最大的数,所以就保证了从尾部开始大到小的顺序排列。每次交换都能确定一个数,因此需要确认N次;每次确认一个数需要花费logN次,所以堆排序的时间复杂度为O(N * logN)。代码如下:public class test { public static void main(S...原创 2019-07-18 16:58:58 · 311 阅读 · 0 评论