求第k小的数
时间:2020-04-19
本文章向大家介绍求第k小的数,主要包括求第k小的数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
先任意找数组中的一个元素a,采用快速排序将数组进行一次划分,即将小于a的元素放在其左侧,大于a的元素放在其右侧。然后判断元素a是否满足题目为第k小的数,满足则直接输出,否则判断下一次在哪一区间进行划分。
和快速排序的算法基本一样,只是当找到第k小的数之后就直接退出了,时间复杂度为O(n)
//找第k小的数 #include <iostream> using namespace std; int find(int le,int ri,int a[])//找基准元素位置 { int base=a[le];//基准元素 while(le<ri) { while(le<ri&&a[ri]>=base)//从序列右端开始处理,大于基准的不变 ri--; a[le]=a[ri];//小于基准的交换到左边 while(le<ri&&a[le]<=base)//处理左端,小于基准的不变 le++; a[ri]=a[le];//大于基准的交换到右边 } //当左边的元素都小于base,右边的元素都大于base时,此时base就是基准元素,le或ri就是基准元素的位置 a[le]=base; return le; } void quick_pow(int le,int ri,int k,int a[]) { if(le>=ri) return; int pos=find(le,ri,a); if(k-1==pos) { cout<<a[k-1]<<endl; return ; } else if(k-1<pos) quick_pow(le,pos-1,k,a); else quick_pow(pos+1,ri,k,a); } int main() { int n, k; cin >> n >> k; int a[1000]; for (int i = 0; i < n; i++) cin >> a[i]; quick_pow(0, n - 1, k,a); return 0; }
原文地址:https://www.cnblogs.com/-citywall123/p/12731860.html
- Windows 7下获取System权限
- ASM 翻译系列第十八弹:ASM Internal ASM file number 5
- 菜单式Shell运维脚本调试小记
- 优化Postgres-x2 GTM
- 启用某些Linux发行版的root帐号
- Linux中的完美截图工具:Deepin-ScreenShot
- ASM 翻译系列第二十弹:ASM Internal ASM file number 7
- Linux:awk命令详解
- 给已安装的Linux新增Swap交换分区
- ASM 翻译系列第二十一弹:ASM Attributes Directory
- Linux:sed命令详解
- ASM 翻译系列第二十二弹:ASM Internal ASM file number 8
- Ghost安装Win7/XP后自动恢复IP的批处理
- ASM 翻译系列第二十三弹:ASM Internal ASM files number 12 and 254
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一天一大 leet(最小路径和)难度:中等-Day20200723
- 一天一大 leet(二叉树的最大深度)难度:简单-Day20200728
- 生产者消费者模式的三种实现方式
- java中的阻塞队列
- java虚拟机
- 重构:保持Dockerfile整洁的5个技巧
- spring boot启动过程
- 如何构造jvm的堆溢出和栈溢出
- 一日一技:导入父文件夹中的模块并读取当前文件夹内的资源
- Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法
- Windows NetLogon权限提升漏洞(CVE-2019-1424) 复现
- 源码解析:Git的第一个提交是什么样的?
- 终于搞懂,为什么 Java 的 main 方法必须是 public static void?
- Spring Boot 多版本更新,紧急修复 RFD 安全漏洞
- 【查找】折半查找/二分查找