快速选择 第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;
}

最新文章

  1. 【学习笔记】ionic 学习之环境搭建
  2. C++ 复制构造函数
  3. 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
  4. CSS3 动画触发事件
  5. Java字节码中的方法调用
  6. 十款最佳Node.js MVC框架
  7. 测试开发Python培训:实现屌丝的图片收藏愿望(小插曲)
  8. 微信分享 JSSDK的使用
  9. vue之简单组件例子
  10. Mac os 下brew的安装与使用—— Homebrew
  11. WIndows下使用Grafana+InfluxDB打造监控系统
  12. UVA524 素数环 Prime Ring Problem
  13. 怎么查找Jenkins的个人api token
  14. 【生产问题】记还原一个很小的BAK文件,但却花了很长时间,分析过程
  15. 网络基础之 tcp/ip五层协议 socket
  16. Javascript数组Array的方法总结!
  17. ubuntu16.04 nginx安装
  18. B. Sleepy Game
  19. python网络编程--进程线程
  20. 机器学习之路:tensorflow 深度学习中 分类问题的损失函数 交叉熵

热门文章

  1. 【java】密码检查
  2. 2020西湖论剑一道web题[网盘]
  3. python---100以内所有素数
  4. 鲜为人知帝国CMS内容页调用上一篇和下一篇的精华方法汇总
  5. Python Windows 快捷键自动给剪贴板(复制)图片添加水印
  6. html显示与隐藏元素的几种方式
  7. HTTP和HTTPS有什么不同
  8. petite-vue源码剖析-沙箱模型
  9. 攻防世界-MISC:Aesop_secret
  10. Nessus如何解除IP限制以及解决重启失效的后遗症