排序的总结(一级)

下面我们来看各种排序的一个总结:

大家记住这么几个结论,前面我们已经做了各个排序的一个讲解,那这个时候我们再来看这个图印象会深刻一点,我们来看了,

1. 直接插入排序,简单选择排序,冒泡排序,是最简单的三种排序算法,是最基本的排序,再次强调了,他们的时间复杂度是

O(n 2),注意这已经是最高的了,这效率已经够低的了,不可能还有一种算法比这个还高,如果还有的话就坚决放弃,两轮的

就搞定了,不用再三轮了,这个大家知道,作为基础排序,所以一定要掌握,直接插入排序,选择排序,冒泡排序,复杂度都是n

的平方,效率比较低的

2. 这三种基本的算法比较简单,效率很低,所以每种算法至少还对应着一个相应的高级算法,在简单排序的基础上进行优化,

算法复杂了,但是性能高了,可能还会导致一个更高的空间复杂度,比如shell排序,n的1.3,他是怎么算出来的,大家可以看一下

相关的文档,n的1.3次方,堆排序呢,n*log2 n,快速排序呢,n*log2n,n的平方就是n*n,哪个效率高,n*log2 n效率高m,

这个快速排序可能需要更多地辅助空间,为什么需要这个空间,一般来说需要用到递归了,这是一个内容

3.快速排序和归并排序,都使用了分治和递归,一个叫快速排序,一个叫归并排序,他们都使用到了分治和递归,被问到的机会比较高,

尤其是快排,名字叫快排,确实也比较快,他快到什么程度呢

4. 从时间性能上看,快速排序是所有排序算法中性能最好的,除了下面非比较的,他可以认为是效率最高的,但是他有好坏之分,

有平均情况,也有最坏的情况,什么是最坏的情况,如果数据基本上有序了,你使用快排再排,他需要花更多的额时间,但是我们的

快排都有优化的空间,他的时间性能还不如堆排序和归并排序,所以大家记住,他适合数据不大的情况,我们平时写个数据不会太大吧,

我们处理的数据一般不会太大,所以优先掌握快速的

5. 那这个堆排序,看这个堆排序,快速排序是n*log2 n,堆排序也是n*log2 n,最好的也是堆排序,这个和快排是一样的,但是快排

最坏的情况可以和冒泡达到一样,这个效率太低了,堆排序还是这个样子,这个堆是比较稳定的,但是这个堆是什么意思,什么叫堆,

在JAVA里面堆就是符合条件的二叉树,堆实际上就是二叉树,发现了没,这个排序实际上是用了树了,所以相对而言是比较复杂,

快速排序是和树没关系,就是一个线性表就可以了,这是一个,堆就是一个树,堆排序在任何情况下都很平均,是他的一个优点,

但是堆排序得先构建一个堆,建一棵树,数比较小的时候就不要用它了,体量大,就可以用它

6. 还有归并排序,我们再往下看,看这一块,快速排序和堆排序相比,归并排序的有点是比较稳定,最坏的情况也比较好

如果还有时间把这个也看一下,它里面也用到了递归,也用到了分治,这是一个
8. 然后我们再来讨论稳定性,我们怎么来看这个稳定性呢,仔细来看了,哪些是稳定的,哪些是不稳定的,找规律,找什么规律呢,

就插入排序,交换排序,选择排序,每个里面我们提供两个,我们可以得出一个什么结论呢,每个里面有一个基本的,还有一个

完善的,两个排序,那大家记住,基本的排序,稳定的,三种基本排序一般都是基本稳定的,当然有一个例外,你特别把它记住

就可以了,那还有一个他们对应的高级的排序怎么办,全部是不稳定的,我们可以这么来记,这是我们选择的一个依据,然后

再告诉大家一点,这一点也非常重要,哪一点特别重要呢,基于比较的时间复杂度下限是Ω(N*log2 n),Ω什么意思,他是最好的

还是最坏的,n*log2 n这个已经是最好的性能了,堆排序,归并排序,不可能比这个性能更好,已经用数学证明过了,最坏的是

O(n2),所以这个理论大家要记住了,基于比较的排序最高的性能,最好的性能不可能比他再高,也就是他了,已经是最坏的了

这是一个,如果别人问你,你能不能给我写一个时间复杂度是O(n)复杂度的,O(n)级别也是线性级别的,能不能写出来,能,

最好的效率是n*logn,是基于比较的排序,我们看刚才的排序,是不是还有非比较的,计数排序和基数排序,这个性能比较高,

但还用的并不多,其实是很少问的,你把这个基数排序给我写一下吗,好像还没有人问过这种,估计别人也不会,我们掌握的

话内容很多,虽然好但是用的并不多

9. 如果别人要求你写了一个O(n)时间复杂度的排序算法,你千万不要说不可能,可能的,使用非比较的排序,比如计数排序,

基数排序,可以达到O(n)的复杂度,它是可以达到这个复杂度的,他们是有前提条件的,得满足一定的条件,并且需要更多的

辅助空间,有利有弊,这是一个


10. 最后一点,请问这几种排序哪一种最好,很难说哪一种最好,没有最好的,只有最合适的,如果说最好的那冒泡永远都不是

最好的,那就别用它了,但是如果数据量少的话也没什么影响,所以这个大家记住,没有最好的,只有更合适的,我们根据情况

可以选择这些,这是我们排序的最后的一个总结,再次强调一下,3种基本排序,直接插入,直接选择,冒泡,一定要掌握,快速排序

作为一个必杀技,一定要掌握,能够把这个问题回答出来,而且回答的特别好,就会大大加分,归并排序有时间也可以看一下

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/89785341