快速排序和归并排序的区别,Python代码实现

排序理念比较:

 

归并排序merge sort思路:

归并排序中间劈一刀,两边再排序,然后把左右两个合并。就是先局部有序,再整体有序。

快速排序思路:

随便选择一个数字作为中间点,小于放在左边,大于放在右边。递归对左右两个部分排序。就是先整体有序,后局部有序

 

归并排序优缺点

优点:容易掌握,用处广泛。分治思想很重要

缺点:花费O(n)的额外空间,因为要合并两个数组,不可能在原地合并数组,必须要开辟新的空间来合并。所以这种算法败给了快速排序算法。

 

稳定性比较:

 

稳定就是同样的数字,比如两个1,排序前后两个1位置不变。

归并排序能够保证原来的顺序,很稳定。

快排不够稳定。
 

复杂度比较

 

时间复杂度:

复杂度都是nlogn,本质是有区别的。

快排的平均复杂度是nlogn,最坏会达到n平方的复杂度。每次都选择最左边的数字,导致左边只有一个数字,右边有其他数字。

归并排序复杂度最好,最坏,平均都是nlogn。是严格的nlogn复杂度。

空间复杂度:

快排空间复杂度是原地排序,不用额外空间呢。

归并排序需要额外的O(N)空间,因为要合并两个数组,不可能在原地合并数组,必须要开辟新的空间来合并

 

 

快速排序总结,Python版代码

https://blog.csdn.net/BTUJACK/article/details/84195993

 

归并排序Python代码

https://blog.csdn.net/BTUJACK/article/details/84197960

 

分治算法,分为两个部分,两个部分做同样的事情。


 

认识你是我们的缘分,同学,等等,学习人工智能,记得关注我。

 

微信扫一扫
关注该公众号

《湾区人工智能》

你可能感兴趣的:(数据结构)