【算法】快速排序与归并排序对比

举报
韩曙亮 发表于 2022/01/13 22:58:44 2022/01/13
【摘要】 算法 系列博客 【算法】刷题范围建议 和 代码规范 【算法】复杂度理论 ( 时间复杂度 ) 【字符串】最长回文子串 ( 蛮力算法 ) 【字符串】最长回文子串 ( 中心线枚举算法 ) 【字符串】最长回文...

算法 系列博客

【算法】刷题范围建议 和 代码规范
【算法】复杂度理论 ( 时间复杂度 )

【字符串】最长回文子串 ( 蛮力算法 )
【字符串】最长回文子串 ( 中心线枚举算法 )
【字符串】最长回文子串 ( 动态规划算法 ) ★
【字符串】字符串查找 ( 蛮力算法 )
【字符串】字符串查找 ( Rabin-Karp 算法 )

【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )
【算法】双指针算法 ( 有效回文串 II )
【算法】哈希表 ( 两数之和 )

【算法】快速排序
【算法】归并排序
【算法】快速排序与归并排序对比






一、时间复杂度



快速排序 ( Quick Sort )归并排序 ( Merge Sort ) 的时间复杂度都是 O ( n log ⁡ n ) O(n \log n) O(nlogn) ;


快速排序 的 平均时间复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn) , 该时间复杂度是一个期望值 , 快速排序在 最坏情况下会达到 O ( n 2 ) O(n^2) O(n2) ;

如 : 数组 [1,2,3] 排序 , 有 6 种排列方式 , 计算这 6 种排序时间复杂度的平均期望就是 O ( n log ⁡ n ) O(n \log n) O(nlogn) ;

最坏的情况时 [1,2,3] 排列情况 , 时间复杂度 O ( n 2 ) O(n^2) O(n2) ;


归并排序最好情况下的时间复杂度最坏情况下的时间复杂度 都是 O ( n log ⁡ n ) O(n \log n) O(nlogn) ;


从时间复杂度来讲 , 归并排序 的稳定性 要比 快速排序 高 , 二者时间复杂度相当 ;





二、空间复杂度



从空间复杂度来讲 , 归并排序 的空间复杂度是 O ( n ) O(n) O(n) , 快速排序 的空间复杂度是 O ( 1 ) O(1) O(1) , 快速排序没有使用额外的空间 , 在数组原地进行排序 ,





三、排序稳定性



排序的稳定性 : 假如数组中有两个相同的元素 , 给这两个相同的元素分别打上标记 , 如果每次排列得到的元素顺序都是相同的 , 则说明该排序是稳定的 ;

如 : { 2 , 1 , 1 , 2 } \{2,1,1,2\} {2,1,1,2} , 中给 2 2 2 打上标记 , { 2 ′ , 1 , 1 , 2 ′ ′ } \{2',1,1,2''\} {2,1,1,2} , 最终排序后是 { 1 , 1 , 2 ′ , 2 ′ ′ } \{1,1,2', 2''\} {1,1,2,2} 还是 { 1 , 1 , 2 ′ ′ , 2 ′ } \{1,1,2'', 2'\} {1,1,2,2} ;

快速排序中 , 这两个结果随机出现 , 同样使用快速排序 , 并不能保证得到的是相同的标记元素次序 ;

归并排序 , 可以保证 , 每次排序 , 得到的都是相同的结果 ;





三、局部有序与整体有序



快速排序 与 归并排序 , 都是将数组分为两个部分 , 然后两部分再次进行递归 ;


快速排序 随便选择了一个数组元素 p 作为中心点 , 将小于等于 p 的元素放在左边 , 将大于等于 p 的元素放在了右边 , 分割完毕后 , 左侧的元素肯定小于右侧的元素 ;
然后对左侧 和 右侧 再次分别选择一个元素 m , n , 进行分割 , 分为 4 份 ,
在 4 份的基础上 , 再次进行分割 , 分为 8 份 , 递归调用该快速排序算法 , 直到所有的元素有序为止 ;

快速排序 是 先整体有序 , 然后局部有序 ;


归并排序 先根据中心点分成两部分 , 左侧和右侧分别进行排序 , 两遍都排序完毕后 , 再组合到一起 ;

归并排序 是 先局部有序 , 然后整体有序 ;

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/119154236

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。