目录

一、快排时间复杂度分析

二、归并排序时间复杂度分析

三、写在最后

一、快排时间复杂度分析

快速排序的时间复杂度在O(nlogn)~ O(n^2)之间,下面我分别分析这两种情况:

(一)快速排序的最好情况O(nlogn)

快速排序的实现方式,就是在当前区间中选择一个x,区间中所有比x小的数都需要放到x的左边,而比x大的数则放到右边。在理想的情况下,我们选取的分界点刚好就是这个区间的中位数。也就是说,在操作之后,正好将区间分成了满足数字个数相等的左右两个子区间(快排是按照值的大小划分,个数可能相等,可能不等)。此时就和归并排序基本一致了:

递归的第一层,n个数被划分为2个子区间,每个子区间的数字个数为n/2;

递归的第二层,n个数被划分为4个子区间,每个子区间的数字个数为n/4;

递归的第三层,n个数被划分为8个子区间,每个子区间的数字个数为n/8;

  …

递归的第logn层,n个数被划分为n个子区间,每个子区间的数字个数为1;

以上过程与归并排序基本一致,而区别就是,归并排序是从最后一层开始进行merge操作,自底向上;而快速排序则从第一层开始交换区间中数字的位置,是自顶向下的。但是,merge操作和快速排序的调换位置操作,时间复杂度是一样的,对于每一个区间,处理的时候,都需要遍历一次区间中的每一个元素。这也就意味着,快速排序和归并排序一样,每一层的总时间复杂度都是O(n),因为需要对每一个元素遍历一次。而且在最好的情况下,同样也是有logn层,所以快速排序最好的时间复杂度为O(nlogn)。

(二)快速排序的最坏情况O(n^2)

对于每一个区间,我们在处理的时候,选取的轴刚好就是这个区间的最大值或者最小值。比如我们需要对n个数排序,而每一次进行处理的时候,选取的轴刚好都是区间的最小值。于是第一次操作,在经过调换元素顺序的操作后,最小值被放在了第一个位置,剩余n-1个数占据了2~n个位置;第二次操作,处理剩下的n-1个元素,又将这个子区间的最小值放在了当前区间的第1个位置,以此类推…每次操作,都只能将最小值放到第一个位置,而剩下的元素,则没有任何变化。所以对于n个数来说,需要操作n次即n层,才能为n个数排好序。而每一次操作都需要遍历一次剩下的所有元素,这个操作的时间复杂度是O(n),所以总时间复杂度为O(n^2)。

其实上面的过程,我们可以换一个角度理解:每次操作,找出最小值放到剩余区间的第一个位置,这不就是选择排序的实现方式吗?而选择排序的时间复杂度就是O(n ^ 2),所以上面的过程也就O(n^2)。

二、归并排序时间复杂度分析

归并排序的时间复杂度是O(nlogn),且这个时间复杂度是稳定的,不随需要排序的序列不同而产生波动。下面我来分析一下~

假设我们需要对一个包含n个数的序列使用归并排序,并且使用的是递归的实现方式,那么过程如下:

递归的第一层,将n个数划分为2个子区间,每个子区间的数字个数为n/2;

递归的第二层,将n个数划分为4个子区间,每个子区间的数字个数为n/4;

递归的第三层,将n个数划分为8个子区间,每个子区间的数字个数为n/8;

  …

递归的第logn层,将n个数划分为n个子区间,每个子区间的数字个数为1;

  在整个归并排序的过程中,每一层的子区间,长度都是上一层的1/2。分析可知,当子区间的长度为1时,共划分了logn层。而归并排序的merge操作,则是从最底层开始(子区间为1的层),对相邻的两个子区间进行合并,过程如下:

在第logn层(最底层),每个子区间的长度为1,共n个子区间,每相邻两个子区间进行合并,总共合并n/2次。n个数字都会被遍历一次,所有这一层的总时间复杂度为O(n);

  …

在第2层,每个子区间长度为n/4,总共有4个子区间,每相邻两个子区间进行合并,总共合并2次。n个数字都会被遍历一次,所以这一层的总时间复杂度为O(n);

在第1层,每个子区间长度为n/2,总共有2个子区间,只需要合并一次。n个数字都会被遍历一次,所以这一层的总时间复杂度为O(n);

  通过上面的过程我们可以发现,对于每一层来说,在合并所有子区间的过程中,n个元素都会被操作一次,所以每一层的时间复杂度都是O(n),共有logn层,所以归并排序的时间复杂度就是O(nlogn)。

————————————————

版权声明:本文为CSDN博主「qing小星星」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_64565994/article/details/125253331

关于快速排序和归并排序的时间复杂度分析相关推荐

  1. 希尔排序、快速排序、归并排序的实现分析以及时间复杂度

    高级排序 希尔排序 快速排序 归并排序 希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序",是插入排序算法的一种更高效的改进版本. 我在另一篇文章中说插入排序的时候,会有一个 ...

  2. 二路归并排序及时间复杂度分析

    序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...

  3. 排序算法-归并排序的时间复杂度分析

    归并排序,其实就是递归+合并. 归并排序将数组取中间分为两部分,两个子数组分别各自再从中间分为两个子数组,一直分下去直到不能再分.分完之后,再按照子数组大小合并为为一个有序数组,然后层层向上合并,直到 ...

  4. 归并排序执行次数_归并排序过程、时间复杂度分析及改进

    前言 上一篇文章,介绍过第一种基于分治策略的排序算法--快速排序.接下来我们来讨论另一种基于分治策略的排序算法,归并排序.归并排序也被认为是一种时间复杂度最优的算法,我们还是按照基本过程,代码,最坏时 ...

  5. 快速排序归并排序—时间复杂度分析

    引言: 大家好,我是小星星,今天要梳理的知识点是--快速排序和归并排序时间复杂度分析. 目录 一.快排时间复杂度分析 二.归并排序时间复杂度分析 三.写在最后 一.快排时间复杂度分析 快速排序的时间复 ...

  6. 快速排序 C++代码实现及其算法思想及时间复杂度分析及优化 恋上数据结构笔记

    文章目录 复习梗概 算法思想 算法复杂度分析及稳定性 如何优化? 快速排序改进版代码C++ 快速排序个人青春版代码 完整代码 复习梗概 算法思想,别的排序名字直接就能让人联想到它的算法思想,唯独快速排 ...

  7. 快速排序的时间复杂度分析

    快速排序的时间复杂度分析 先说结论: 最坏情况:O(N2)O(N^{2})O(N2) 最好情况和平均情况:O(NlogN)O(NlogN)O(NlogN) 下面开始分析. 假设一个序列共有 N 个元素 ...

  8. 排序算法-归并排序的实现与时间复杂度分析

    归并排序 归并排序是分而治之的排序算法. 划分步骤很简单:将当前数组分成两半(如果N是偶数,则将其完全平等,或者如果N是奇数,则一边稍大于一个元素),然后递归地对这两半进行排序. 递归写法 归并排序递 ...

  9. 排序算法-快速排序的时间复杂度分析

    快速排序的思想是在数组[p,r]中选择一个分区点q,将数组一分为2,同时将小于分区点的数值的放到分区点左侧[p,q-1],大于分区点的数值的放到分区点右侧[q+1,r],重复这个过程. 快速排序也是用 ...

最新文章

  1. 重新格式化NameNode后,DataNode启动不起来问题解决
  2. Function接口练习之按照指定要求操作数据
  3. PHP中的include、include_once、require、require_once
  4. 583. 两个字符串的删除操作
  5. maven项目导出为jar包
  6. 简单的签到代码_签到功能,用 MySQL 还是 Redis ?
  7. Linux下如何查找nginx配置文件的位置
  8. 实习成长之路: MySQL三 : 事务隔离:为什么你改了我还看不见?
  9. 表情商店竞争加剧,陌陌和微信的“另一桩”生意
  10. 简述游戏抽奖机制运用的心理学知识(上)
  11. MMQ 开源免费 同时支持分布式架构和数据持久化、规则引擎、ACL的MQTT broker。
  12. android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
  13. Spring MVC的数据绑定(简单数据绑定+POJO类型绑定)
  14. 基于高分辨率影像城市绿地信息提取_[转]ENVI支持下利用高分辨率影像城市绿地信息提取方案...
  15. 情人节主题的公众号图文排版怎样设计最走心?
  16. python读取.tsv文件例子(大文件处理)
  17. 关于测绘专业软件时的一些感悟
  18. ElasticSearch第三讲 ES-docker-Compose集群部署证书认证
  19. pdm系统怎么删除服务器,完全卸载Solidworks Enterprise PDM方法
  20. ADS1292检测原理及其驱动

热门文章

  1. 宝藏又小众的线条免抠元素素材网站分享
  2. 推荐系统笔记(三):NDCG Loss原理及其实现
  3. python基础_函数及作业
  4. css设置按钮竖直方向居中_css实现垂直居中6种方法
  5. mongodb 的一些启动命令
  6. java 经济学_经济学中的囚徒困境
  7. Android 10实现全局静音
  8. 禁止所有搜索引擎访问网站的任何部分
  9. 八电平怎么画_原创【我们和玛塔一起编童话】公主和巫婆(八)
  10. Android TextView同时设置粗体和斜体