当前位置: 首页 > backend >正文

第k小整数(快排)

题目描述

“哇,好多冰淇淋啊!”张琪曼跑到学院的冷饮店,伸出2根手指对冰淇淋老板说,“来3个。”老板蒙了,问:“几个?”张琪曼又伸出3根手指说“2个。”
老板满头大汗:“我不管你要几个,只要你能从你的口袋里的魔法石里找出第k小的魔法石,冰淇淋随便你吃。”
现在你知道该怎么做了吧?那就是:对于给定的n个元素的无序数组,要求从中找出第k小的元素。

输入

第一行是总数n(1<n<100000)和k,第二行是n个待比较元素。

输出

第k小的数在数组中的位置。

样例输入
5 3
25 9 90 57 3
样例输出
1

(时间复杂度小于2n)

区间[L,R]

1.找到分界点x(三种选择q[L],q[R],q[(L+R)/2])

2.左边所有数Left\leqslantx

   右边所有数Right\geqslantx

3.递归排序Left,递归排序Right

k\leqslant s_L(s_L为左区间长度),递归Left

k>s_L,递归Right(k-s_L

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,q[100005],pos[100005];
int quick_sort(int l,int r,int k){if(l==r)return q[l];int x=q[l],i=l-1,j=r+1;while(i<j){while(q[++i]<x);while(q[--j]>x);if(i<j)swap(q[i],q[j]);}int sl=j-l+1;if(k<=sl)return quick_sort(l,j,k);return quick_sort(j+1,r,k-sl);
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>k;for(int i=0;i<n;i++){cin>>q[i];if(pos[q[i]]==0)pos[q[i]]=i+1;}int d=quick_sort(0,n-1,k);cout<<pos[d];return 0;
}

http://www.xdnf.cn/news/16783.html

相关文章:

  • 遥控器信号捕获
  • Trice移植(Start with Trice)
  • CS231n2017-Lecture9经典CNN架构笔记
  • Java学习-运算符
  • Git 进阶使用
  • 算法篇----位运算
  • 【Mysql】字段隐式转换对where条件和join关联条件的影响
  • Oracle EBS 缺少adcfgclone.pl文件
  • 链接脚本中. = ALIGN(4);的作用?
  • 北斗变形监测在地质灾害监测中的应用
  • 浅谈低代码平台涉及的一些技术选型
  • AI Agent 视角:可执行程序的二进制格式,是一场「结构化语言」与「智能解析」的双向奔赴
  • UE5多人MOBA+GAS 番外篇:同时造成多种类型伤害,以各种属性值的百分比来应用伤害(版本二)
  • 流式编程的中间操作
  • linux编译基础知识-编译时路径和运行时路径
  • 在Idea中,配置maven
  • Galaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人
  • 【C语言】预处理详解
  • 高防服务器租用:保障数据安全
  • Nginx跨域问题与 MIME 类型错误深度排错指南:解决 MIME type of “application/octet-stream“ 报错
  • PyTorch分布式训练深度指南
  • 26数据结构-顺序表
  • 【数据结构与算法】21.合并两个有序链表(LeetCode)
  • 如何将消息转移到新 iPhone
  • 深入剖析Spring IOC容器——原理、源码与实践全解析
  • Linux---编辑器vim
  • 嵌入式学习笔记-MCU阶段-DAY10ESP8266模块
  • 初识微服务
  • 飞算 JavaAI 中 SQL 另存为脚本功能详解
  • ZKmall开源商城微服务架构电商平台:服务注册与配置中心设计