在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是
O(n)

O(n log n)

O(n (log n)2)

O(n 3/2)

答案 A

基数排序 桶排序 基数排序

BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到o(n)的时间复杂 度,五位算法作者做了精妙的处理。

算法步骤:

1. 将n个元素每5个一组,分成n/5(上界)组。

2. 取出每一组的中位数,任意排序方法,比如插入排序。

3. 递归的调用selection算法查找上一步中所有中位数的中位数,设为x,偶数个中位数的情况下设定为选取中间小的一个。

4. 用x来分割数组,设小于等于x的个数为k,大于x的个数即为n-k。

5. 若i==k,返回x;若i<k,在小于x的元素中递归查找第i小的元素;若i>k,在大于x的元素中递归查找第i-k小的元素。

终止条件:n=1时,返回的即是i小元素。

转载于:https://www.cnblogs.com/kxzh/p/8584538.html

20180316 数组查询时间复杂度相关推荐

  1. hashmap为什么查询时间复杂度为O(1)

    Hashmap是java里面一种类字典式数据结构类,能达到O(1)级别的查询复杂度,那么到底是什么保证了这一特性呢,这个就要从hashmap的底层存储结构说起,下来看一张图: 上面就是hashmap的 ...

  2. php in_array 遍历,in_array大数组查询性能问题

    问题 最近在实现一个项目接口的时候发现当数组过大的时候,数据返回的速度有点慢.接口数据返回最长反应时间2s,经过反复调试发现代码段耗时最长的部分在in_array()函数. 解决过程 在stackov ...

  3. java数组的时间复杂度_java时间复杂度计算

    时间复杂度是指算法执行语句执行的次数. 常见的时间复杂度有以下几种: 描述 时间复杂度 常数阶 O(1) 对数阶 O(logn) 线性阶 O(n) 线性对数阶 O(nlogn) 平方阶 O(n²) 立 ...

  4. Q1.Numpy_数组、数组查询、转置和轴对换、读写文件

    安装地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/ numpy,matplotlib都是在这里下载 import numpy as np Part_1: ...

  5. JS中数组查询的方法indexOf()、lastIndexOf()、includes()、find()、findIndex()、filter()、every()

    JS中涉及到数组查询的方法见下表: 方法 描述 参数 返回值 indexOf() 搜索数组中的元素,并返回它所在的位置. 要搜索的元素 ,查找的起始位置 元素第一次出现的索引 lastIndexOf( ...

  6. MongoDB数组查询

    文章目录 MongoDB数组查询 数组匹配 查询数组元素 多条件数组元素查询 1. 复合过滤条件查询数组元素 2. 查询满足多个条件的数组元素 3. 按数组索引位置查询元素 4. 按数组长度查询数组 ...

  7. mysql 数组查询_MySQL查询使用数组

    我正在尝试使用数组查询MySQL数据库,但是遇到了麻烦! 我有一个名为客户的表,我希望能够从"扇区"列等于$ sectorlink的所有行中选择"名称". 然后 ...

  8. 【数据结构】什么是哈希表?为什么哈希表的查询时间复杂度是O(1)?

    大家好,我是卷心菜,可以叫我菜菜,大二学生一枚.本篇主要讲解一种数据结构:哈希表.如果您看完文章有所收获,可以三连支持博主哦~,嘻嘻. 文章目录 一.前言 二.数组 三.哈希表 1.百度百科 2.问题 ...

  9. 求数组中的最小子数组,时间复杂度o(n),java

    石家庄铁道大学 信1405-1 班 唐炳辉 题目:给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 设计思路:两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值,当 ...

最新文章

  1. 如何删除linux的root权限,永久删除现代Linux的root权限
  2. 2 datax mysql 和 mysql之间相互导入
  3. java 运行main_使用maven运行Java Main的三种方法解析
  4. 为什么服务端程序都需要先 listen 一下?
  5. fast start oracle,Oracle Data Guard快速启动故障切换 - fast-start failover(FSFO)
  6. 使用java9的uuid生成方式,让uuid生成速度提升一个档次
  7. Java EE第七周
  8. CB Insights,201608月174家独角兽榜单出炉,上榜的33家中国公司都是谁?
  9. python监听网络请求_Python实现一个服务器监听多个客户端请求
  10. (原创)分享一下最近搞的tiny210V2从nand启动支持(K9GAG08U0F).
  11. dnf超时空漩涡副本路线流程图_dnf怎么打超时空漩涡 dnf超时空漩涡打法攻略
  12. 元学习提高黑盒对抗攻击
  13. C++加载csb文件
  14. c++ Win x64 注册表操作
  15. 数据生产力崛起:新动能+新治理
  16. 讯飞AIUI智能机器人2
  17. Unittest-单元测试3
  18. 读书百客:《浣溪沙·谁念西风独自凉》赏析
  19. 线程并发和并行_并发性,并行性和圣诞老人​​的许多线程
  20. 进程的五种基本状态 - 操作系统

热门文章

  1. m.pythontab.com_Python expandtabs()函数的使用
  2. 网络营销专员浅析如何判断网络营销中网站优化效果几何?
  3. 网络推广外包——网络推广外包专员是如何发布软文外链的呢?
  4. 浅析网站URL优化有哪些问题需要注意呢?
  5. 搜索引擎蜘蛛为什么对网站不爬行呢?
  6. python arima模型_时间序列分析 ARIMA模型 Python(2)
  7. 打印机驱动程序属于计算机硬件吗,如何安装打印机驱动程序,详细教您如何给电脑安装打印机驱动程序...
  8. Android React Native 笔记(一):基础
  9. 关键词 onStart()和onResume()存在的原因(测验篇)两者的区别
  10. https wireshark抓包——要解密出原始数据光有ssl 证书还不行,还要有浏览器内的pre-master-secret(内存里)...