快速排序时间复杂度

递归算法的时间复杂度=递归次数*每次递归遍历的次数

我们来看一下快速排序算法的时间复杂度需要怎么来算呢?
代码实现:

//左右指针法  不断缩放
//思路 begin 找大的  end 找小的
//还要注意  如果是选end为key  则begin先走 否则end先走
//当选择end时候  因为当最后一次 end和begin差一个距离时候 如果先走end那会导致
//把实际较小的没有交换 因为换之前 大小是左边小右边大 如果end先走 等于把begin所在的较小的换到最后去
int PartSort1(int* a, int begin, int end)
{  int& key = a[end];  while (begin < end)  {  //begin找大  while (begin < end&&a[begin] <= key)//这里注意的是<=  小心有重复数字  begin++;  //end找小  while (begin < end&&a[end] >= key)  end--;  if(begin<end)  swap(a[begin], a[end]);  }  //最好出来begin位置 一定是大于key的  swap(a[begin], key);  return begin;
}  void QuickSort(int* a, int begin,int end)
{  if (begin >= end)  return;  else  {  int div = PartSort1(a, begin, end);  QuickSort(a, begin, div - 1);  QuickSort(a, div+1, end);  }
}  

快速排序我们可以近似的想成一个完全二叉树

一个数组的容量是N,第一层递归遍历的次数是N,因为数组里每个数字都需要和key比较,那么接下来遍历分出来的两个区间,总的遍历次数还会是近似是N,以此类推,直到分为最后一个,也就是说树的高度是lgn,也就是递归次数,所以时间复杂度是N*lgN.

进阶:

问题:
有100万个数字,找出第10万个大的,这个问题,首先不是大数据问题,内存是可以放下的,这是快速排序的变形问题,第10万个大的其实是让我们找div=10万,(快速排序返回的div,其实就是下标,也就是数字在数组的准确序号[序号指的是第几个大])下面给出实现代码

int PartSort1(int* a, int begin, int end)
{  int& key = a[end];  while (begin < end)  {   //begin找大  while (begin < end&&a[begin] <= key)//这里注意的是<=  小心有重复数字  begin++;   //end找小  while (begin < end&&a[end] >= key)  end--;  if(begin<end)  swap(a[begin], a[end]);  }   //最好出来begin位置 一定是大于key的  swap(a[begin], key);  return begin;
}  void QuickSort(int* a, int begin,int end)
{  if (begin >= end)  return;  else  {  int div = PartSort1(a, begin, end);  if(div==100000)return a[div]else if(div>100000)QuickSort(a, begin, div - 1);  elseQuickSort(a, div+1, end);  }
}  

那这个代码的时间复杂度是多少呢?

我们可以用数形结合的方法,这个算法相当于一直走的是树的左枝,其余的都没有走,这其实就相当于变成了单链表,那遍历单链表的时间复杂度其实就是O(n),同理这个代码的时间复杂度也是O(n),

通过这个题我们可以看出数形结合有时候非常的清晰直观

巧解快速排序时间复杂度相关推荐

  1. 快速排序时间复杂度为O(n×log(n))的证明

    快速排序时间复杂度为O(n×log(n))的证明 2014年05月22日 11:17:52 oohaha_123 阅读数:2789 标签: 快速排序算法导论复杂度证明 更多 个人分类: 资料收集整理数 ...

  2. matlab中函数或变量无法识别怎么办_用MATLAB巧解微分方程实例分析

    点"考研竞赛数学"↑可每天"涨姿势"哦! MATLAB巧解微分方程实例分析 王少华 西安电子科技大学 微分方程求解难, 字母一堆看着烦. 写错数字一时爽, 一直 ...

  3. js排序算法详解-快速排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-快速排序 既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法: ...

  4. 使用python的zipfile模块巧解word批量生成问题

    使用python的zipfile模块巧解word批量生成问题 任务需求 任务拆解 任务方案 方案一:使用python-docx.Document读取word文档 方案二:zipfile巧解word文档 ...

  5. 《用莫比乌斯带巧解内接矩形问题:拓扑学的用处》学习笔记

    昨天 Rocket101 孟美岐 发歌了,刚刚看到,犹豫了一会磕不磕.最后含是氪了一发,唱的含行,可惜旋律一般好听,没有加入歌单. Bilibili链接 用莫比乌斯带巧解内接矩形问题:拓扑学的用处.- ...

  6. Scratch案例——巧解数学题,求累加和

    用Scratch巧解数学题 --求累加和 问题:计算1+2+-+100 =? 据说,数学王子--高斯10岁时,数学老师为了惩罚一帮不听话的孩子,出了一道算术难题,就是上面这道题目.原以为会让大家忙乎一 ...

  7. 美的 java 薪酬,美的集团iHR巧解“薪酬管理”难关——薪资核算发放

    原标题:美的集团iHR巧解"薪酬管理"难关--薪资核算发放 传统薪酬管理日益式微,算薪难,大型企业的算薪就更难!作为大型企业的小"薪",在薪资核算时,最头痛的事 ...

  8. 上反对下反对推理图_判断推理:巧解直言上下反对关系

    [导读] 中公事业单位为帮助各位考生顺利通过事业单位招聘考试!今天为大家带来判断推理之巧解直言上下反对关系.希望可以帮助各位考生顺利备考! 在事业单位考试中,直言的上下反对关系是一个高频考点.为此,这 ...

  9. Python字符串切片(s[::-1])巧解回文字符串判定

    [点击此处跳转笔记正文] Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基 ...

  10. 购物单 蓝桥杯真题(EXCEL一分钟巧解)

    上文链接:蓝桥杯之猴子吃桃-递归极度简化(c++实现) 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促 ...

最新文章

  1. int long java_java long int的区别
  2. php protected 属性,PHP实现在对象之外访问其私有属性private及保护属性protected的方法...
  3. java实现倒计时闹钟_js带闹铃功能的倒计时代码
  4. python ---Pandas时间序列:生成指定范围的日期
  5. 2017年上半年最受关注度的几大免费OA品牌
  6. 优秀渗透工具资源整理(持续更新)
  7. 竞赛准备篇---(一)抽签问题
  8. 测试基础-05-bug的定义生命周期
  9. DataBseDesign工作笔记001---基于RBAC用户权限管理数据库设计_用图的形式说明_精确到页面的元素
  10. Tampermonkey 编写一个首页跳转的脚本
  11. POJ3421:X-factor Chains——题解
  12. JS--微信浏览器复制到剪贴板实现
  13. prml线性模型小结
  14. 将Excel文件数据导入到Oracle
  15. python中linspace函数_Python numpy.linspace函数方法的使用
  16. matlab中if语句的条件,matlabif条件语句
  17. Java设计模式:单例模式的7种实现
  18. M365 比较 WLB?而 Bing 加班很猛?我也吃了一鲸!
  19. HTML5 Canvas鼠标与键盘事件
  20. Vue指令 v-for遍历、下拉列表、单选框、复选框

热门文章

  1. Word2013实战技巧
  2. Spring MVC - 拦截器实现 和 用户登陆例子
  3. Web数据挖掘小论文
  4. listView的最简单的使用方法
  5. jsoup(java爬虫)
  6. Nero 9官方正版下载(自带正版序列号)-最好的中文免费刻录软件
  7. zooInspector下载
  8. 仿IOS通讯录效果,实现获取手机通讯录、字母排序显示、搜索联系人、拨打电话
  9. 如何将Android手机用作调制解调器; 无需生根,Redux
  10. java基础——java学习心得