七大排序算法之各算法的比较

前言

如果对七大排序算法还不是很了解的,可以对着下面这些链接,再去学习或者熟悉下

冒泡排序

选择排序

插入排序

快速排序

堆排序

归并排序

希尔排序

这篇文章主要是对这七大排序算法做一些总结,什么情况下应该用哪个排序算法等。

正文

首先,再复习一下各个排序算法的时间复杂度,以及稳定性(图源自网络)


先科普一下算法的稳定性这个概念,什么叫做算法的稳定性呢?举个具体的例子

首先简单的数字排序,这里稳定性没有任何意义,那么情况下有意义呢?要排序的内容是一个复杂对象的多个数字属性,且其原本的初始顺序存在意义,那么我们需要在二次排序的基础上保持原有排序的意义,才需要使用到稳定性的算法,例如要排序的内容是一组原本按照价格高低排序的对象,如今需要按照销量高低排序,使用稳定性算法,可以使得想同销量的对象依旧保持着价格高低的排序展现,只有销量不同的才会重新排序。(当然,如果需求不需要保持初始的排序意义,那么使用稳定性算法依旧将毫无意义)。

好了,接着总结,其实网上关于各大算法的分析已经有很多了,但是可能有一些问题就是,说了一大堆,不能快速get到点,那么这就是这篇文章的目的,没有废话,干货在此。

(1)当原表基本有序时,冒泡排序和插入排序的表现良好,时间复杂度可降至O(n)

(2)当待排序元素个数n较大时,应该选择快速排序,堆排序,或者归并排序等时间复杂度为O(nlogn)的算法

        2.1  若内存空间允许,且要求稳定性,则选择归并排序,但是一般不会直接使用归并排序,通常和插入排序结合起来使用,先用插入排序得到有序序列,再归并之,并且由于插入排序是稳定的,所以改进之后的归并排序仍然是稳定的

        2.2  堆排序所需辅助空间少于快速排序,并且不会出现时间复杂度退化为O(n*n)的情况,也就是说,最坏情况下的时间,复杂度都为O(nlogn)

        2.3   对效率要求较高的话,采用快速排序,且快速排序是大规数据排序场景中应用最多的排序算法

(3)当待排序元素个数n较小时,采用插入排序和选择排序,若同时要求稳定性,采用插入排序

(4)一般不采用传统的冒泡排序

猜你喜欢

转载自blog.csdn.net/hq942845204/article/details/80158144