1.稳定性
前言:要判断一种算法的稳定与否,就是看其相等元素的相对位置是否发生改变。
所以如希尔排序,选择排序,堆排序,快速排序(不稳定)这些涉及移换位置的往往很难控制稳定性。
而冒泡,插入以及归并排序(稳定)这些只发生相邻元素交换,或者干脆不交换,确保了相同元素的相对位置不发生交换。
2.时间复杂度
1.O(N^2):冒泡,直接插入,选择。这些排序在书写中无外乎是两层整体遍历的嵌套循环,很容易得出。
2.O(N*logN):堆排,归并,快排。这些利用了递归思想,将数组不断二分再遍历。
3.O(N^1.3):这是希尔排序的时间复杂度(约等于)
这里是对希尔排序时间复杂度的简单分析。但你要思考,当第一趟排序次数我们计算出为n时,第二次就不再是最坏情况了,所以第二次排序次数实际上是要小于4n的,以此类推,可以得出这幅图
最后,利用一些数学知识才得出的这个O(N^1.3),这里超出本人能力范围,不做赘述。
3.空间复杂度
空间复杂度的判断其实就是看是否开辟了额外的空间:以上提及的算法中除归并与快排,其余空间复杂度全为O(1)。
归并空间复杂度:O(N)。因为归并需要开辟一个临时数组来储存合并后的结果。
快排空间复杂度:O(logN)。递归树的深度为O(logN),即为栈空间用量。
OK!本文到此也就结束了,感谢各位的捧场支持!!!