QuickSort和MergeSort对比小结

1) QuickSort的时间复杂度平均是O(nlogn),但最坏情况下是O(n^2)。MergeSort的时间复杂度严格来说就是O(nlogn)。那为什么实际应用中QuickSort用得多呢?因为MergeSort需用分配额外的O(n)空间,当用到new函数的时候会消耗很多的系统时间。另外像JAVA里面还要garbage collection又消耗一些时间。所以总体上来说MergeSort的overhead更大。
2) QuickSort的写法有很多种,每次取pivot可以从中间取,也可以从两边取,也可以弄个随机函数取。QuickSort也可以搞个额外空间。
而MergeSort一定是从中间取。
3) QuickSort是不稳定算法,MergegSort是稳定算法。这里稳定是指当数组有重复元素时,排序后的元素仍然能保持之前的顺序。
4) QuickSort和MergeSort的复杂度都可以按T(n)=2T(n/2)+O(n)来分析。
QuickSort先做O(n)的部分,再做2T(n/2)的部分。即先整体有序,再局部有序。
MergeSort先做2T(n/2)的部分,再做O(n)的部分。即先局部有序,再整体有序。

未完待续。

你可能感兴趣的:(QuickSort和MergeSort对比小结)