快速选择 第k个数
2024-10-20 14:44:20
快速选择 第k个数
题目描述
给定一个序列,求第k小的数
算法思想
利用快速排序思想,算法复杂度能达到O(n)步骤如下:
1.找到排序分界点x,这里选择区间最左值
2.排序,让左边的值都小于x,右边都大于x
3.递归排序寻找数字,如果左区间数字数目大于k,直接在左边找第k小的数字,如果左区间数字数目小于k,则在右边找
模板
#include<bits/stdc++.h>
using namespace std;
int n, k;
const int maxn = 1e5 + 10;
int a[maxn];
int quickSort(int l, int r, int k) {
if (l == r) return a[l];
int x = a[l], i = l - 1, j = r + 1;
while (i < j) {
while (a[++i] < x);
while (a[--j] > x);
if (i < j) swap(a[i], a[j]);
}
int ls = j - l + 1;
if (k <= ls) return quickSort(l, j, k);
return quickSort(j + 1, r, k - ls);
}
int main() {
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
cout << quickSort(0, n - 1, k);
return 0;
}
最新文章
- 【学习笔记】ionic 学习之环境搭建
- C++ 复制构造函数
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
- CSS3 动画触发事件
- Java字节码中的方法调用
- 十款最佳Node.js MVC框架
- 测试开发Python培训:实现屌丝的图片收藏愿望(小插曲)
- 微信分享 JSSDK的使用
- vue之简单组件例子
- Mac os 下brew的安装与使用—— Homebrew
- WIndows下使用Grafana+InfluxDB打造监控系统
- UVA524 素数环 Prime Ring Problem
- 怎么查找Jenkins的个人api token
- 【生产问题】记还原一个很小的BAK文件,但却花了很长时间,分析过程
- 网络基础之 tcp/ip五层协议 socket
- Javascript数组Array的方法总结!
- ubuntu16.04 nginx安装
- B. Sleepy Game
- python网络编程--进程线程
- 机器学习之路:tensorflow 深度学习中 分类问题的损失函数 交叉熵