常用算法排序比较

先看图:
在这里插入图片描述1.直接插入排序、简单选择排序、冒泡排序是最简单的三种排序算法,时间复杂度也最高O(n2),作为基础排序,面试中有被问到,三种都要掌握。
2.三种简单排序算法简单,但是效率低下;高级排序在简单排序基础上优化,算法复杂,换取的是性能提高,同时可能需要更多的辅助空间。
3.快速排序和归并排序都使用了分治和递归,所以面试时被问到的机会比较高,尤其是快速排序。
4.从时间性能上看,快速排序是所有排序算法中实际性能最好的,然而快速排序在最坏情况下(数据基本有序)的时间性能不如堆排序和归并排序,
并且空间复杂度高,所以更适合数据不大的情况。
5.堆排序在任何情况下,其时间复杂度为 Ο(n log n)。这相对于快速排序而言是堆排序的最大优点。
堆排序在元素较少时由于消耗较多时间在初始建堆上,因此不值得提倡,然而当元素较多时还是很有效的排序算法
6.与快速排序和堆排序相比,归并排序的优点是它是一种稳定的排序方法,最坏情况下时间性能好。
7.从方法稳定性上来看,大多数时间复杂度为Ο(n2 )的排序均是稳定的排序方法,除简单选择排序之外。
而多数时间性能较好的排序方法,例如快速排序、堆排序、希尔排序都是不稳定的
8.基于比较的排序的时间复杂度下限是 Ω(nlogn),即这已经是最高的效率了。
9.如果在面试中有面试官要求你写一个O(n)时间复杂度的排序算法,你千万不要立刻说:这不可能!
使用非比较的排序(计数排序、基数排序)可以达到线性时间O(n)复杂度的排序,
只不过有前提条件,就是待排序的数要满足一定的范围的整数,而且可能需要较多辅助空间。
10.需要结合具体的需求和场景来选择甚至组合使用。才能达到高效稳定的目的。没有最好的排序,只有最适合的排序。

猜你喜欢

转载自blog.csdn.net/s_pr1te/article/details/89555890