排序算法总结

作者: 公子七 | 来源:发表于2017-09-03 17:19 被阅读100次

笔试时总是会有各种排序的题层出不穷。
虽然是FE,但是面试时面试官也会经常让你手撕个剑指offer或者是顺便问问常见排序算法的时间复杂度 or 稳定性。
最近有点小心累很久没有写过总结。
但事实证明写总结是让心静下来的一种方式~

关于各种算法的原理还有伪代码就不赘述了~有看到大神总结的表格直接copy过来用了。



看似简简单单的表格,蕴含的信息量却相当的大~
一个刷题功利性患者就从刷题的角度来对表格总结写吧~

题型1、对时间复杂度的考察

① 给定场景,选择最优的排序算法

考察的是各算法的最好/最坏使用场景。

插入排序
最好情况,正序有序,只需要比较n次,且不需要移动。时间复杂度为O(n)。
最坏情况,逆序有序,n个元素,每个元素都需要比较n-1次,时间复杂度为O(n^2)。

冒泡排序
最好情况,正序有序,时间复杂度为O(n);
最坏情况,逆序有序,时间复杂度为O(n^2)。

快速排序
最好情况:均匀分布,每次都将序列分为两个部分(一般二分复杂度都与logn有关),时间复杂度为O(nlogn);
最坏情况:序列基本有序,时间复杂度为O(n^2)。

希尔排序,和步长有关

选择排序
最好情况:正序有序,交换0次,但是每次都要找到最小元素,因而只是减少了交换次数,时间复杂度为O(n^2)

②给定场景,直接考察时间复杂度
③与初始状态相关,比较次数,时间复杂度

比较次数和时间复杂度还是有区别的,堆排序的时间复杂度不会因为待排序序列的有序程度而改变,但是待排序序列的有序程度会影响比较次数,选择排序每选一个输出来数出来都要和剩余的所有数比较,这样待排序序列的有序程度不会影响比较次数。
元素的移动次数与关键字的初始排列次序无关的是:基数排序
元素的比较次数与初始序列无关的是:选择排序
元素的时间复杂度与初始序列无关的是:选择排序、归并排序、堆排序

题型2、考察对排序算法的理解

①给定一个数组,写出在某种排序算法遍历1次/n次的排列。
②给定原序列和经过N次排序后的序列,判断最有可能是用什么算法进行排序。

这一点其实更多考察的是各排序算法进行一次排序后元素的位置。
其中,冒泡、选择、快排、堆都是可以确定一个元素的位置的。
快排确定的是标杆元素的位置,而插入排序确定的是元素的相对位置。

题型3、对空间复杂度的考察

归并排序空间复杂度为O(n),快排为O(logn),其余都是O(1)。

题型4、对稳定性的考察

稳定排序:冒泡排序、插入排序、归并排序、(计数排序、桶排序、基数排序);
不稳定排序:选择排序。、希尔排序、快速排序、堆排序。

其余题型等待后面刷题再更新~~

参考:十大经典排序算法总结(JavaScript版)
常见排序算法小结

相关文章

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 面试常问的排序算法

    排序算法总结 排序是算法问题中的经典问题。为什么要总结排序算法呢?你懂的 : (假设所有的排序都是要求最终结果为:...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法

    一、排序算法总结 排序算法题目 排序算法快速排序堆排序归并排序 应用最小K个数(TopK问题)215.数组中的第K...

  • 一文搞定十大经典排序算法(Java实现)

    本文总结十大经典排序算法及变形,并提供Java实现。参考文章:十大经典排序算法总结(Java语言实现)快速排序算法...

  • Swift的十大经典排序算法总结

    Swift的十大经典排序算法总结 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排...

  • 算法-排序算法总结

    排序类型总结 1 排序算法基础实现 2 排序算法应用 2.1 基础排序 2.2 计数排序应用 2.3 快排应用 2...

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

网友评论

    本文标题:排序算法总结

    本文链接:https://www.haomeiwen.com/subject/ckrjjxtx.html