JS排序算法总结:八种算法对比
目的:掌握 排序算法的分类及不同算法复杂度的对比、搞清楚 XXX与数组初始状态无关分为几种情况:
a、算法复杂度与初始状态无关;
b、元素总比较次数与初始状态无关;
c、元素总移动次数与初始状态无关。
1、算法分类
十种常见排序算法可以分为两大类:
非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
内部排序与外部排序:
另外,所有的排序都是在内存中做的,这里说的内部排序是指待排序的内容在内存中就可以完成,当待排序的文件很大,计算机内存不能容纳整个文件,这时候对文件就不能使用内部排序了,而外部排序是指待排序的内容不能在内存中一下子完成,它需要做内外存的内容交换,外部排序常采用的排序方法是归并排序。
2、算法复杂度
基本概念:
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。
3、排序方法的算法复杂度与数组初始状态无关
由表中红线标出的地方可以轻易得出以下四种排序方法的算法复杂度与数组的初试状态无关:
一堆(堆排序)乌龟(归并排序)选(选择排序)基(基数排序)友
其中,元素总比较次数与初始状态无关的有:选择排序、基数排序。
元素总移动次数与初始状态无关的有:归并排序、基数排序。