7-1 找第k小的数 (20分)_pg051 第k小的数_Suzerk的博客-程序员宅基地

7-1 找第k小的数 (20分)
设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数。

提示:函数int partition(int a[],int left,int right)的功能是根据a[left]a[right]中的某个元素x(如a[left])对a[left]a[right]进行划分,划分后的x所在位置的左段全小于等于x,右段全大于等于x,同时利用x所在的位置还可以计算出x是这批数据按升非降序排列的第几个数。因此可以编制int find(int a[],int left,int right,int k)函数,通过调用partition函数获得划分点,判断划分点是否第k小,若不是,递归调用find函数继续在左段或右段查找。

输入格式:
输入有两行:

第一行是n和k,0<k<=n<=10000

第二行是n个整数

输出格式:
输出第k小的数

输入样例:
在这里给出一组输入。例如:
10 4
2 8 9 0 1 3 6 7 8 2
输出样例:
在这里给出相应的输出。例如:
2

#include<iostream>
using namespace std;
void swap(int &a,int &b){
    
	int p=a;
	a=b;
	b=p;
}
int partition(int a[],int left, int right){
    
int i = left, j = right + 1;
int x = a[left];
while (true)
{
      while (a[++i] < x&&i < right);
   while (a[--j] > x);
   if (i >= j)break;
   swap(a[i], a[j]);
}
a[left] = a[j];
a[j] = x;
return j;
}

int find(int a[],int left,int right,int k){
    
    int i = partition(a, left, right);
    if (k < i+1) return find(a, left, i, k);
    else if (k==i+1){
     return a[i];}
    else return find(a, i + 1, right, k );
}
int main()
{
       int m,n;
    cin >>n>>m;
 int arr[1000];
for (int k = 0; k < n; k++)
    {
    cin >> arr[k];}
cout << find(arr, 0, n - 1, m);
return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Suzerk/article/details/109014527

智能推荐

UITextField小结-程序员宅基地

//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)] //设置边框样式,只有设置了才会显示边框样式  text.borderStyle = UITextBorderStyleRoundedRect; typedef enu

二阶阻尼振子受迫振动pid控制器设计参数整定(基于octave)_pid控制对受迫振动-程序员宅基地

老师闲着无聊以为我们什么都会,布置了一道控制器设计。 大二水过的自控和matlab,我寻思今天下午也陪老师闲着无聊复习复习,结果放在电脑里吃屁的matlab今天鬼畜报错,就装了个octave(麻雀虽小五脏俱全)别看简简单单阻尼振子,久不算这些脑子都有点懵。掏出自控书,看了几篇文章就是干。报错报错 这些盗版的东西天天就是报错。事实证明豪华版盗版不如屌丝版正版。H=tf([0,0,1],[1 ..._pid控制对受迫振动

dm9000数据速率_STM32F103战舰DM9000的LWIP例程TCP速度慢,发送间隔太长-程序员宅基地

應該更改下代碼, 我的TCP Serve發送速度約為655KB/Sec// SEND_BUF_SIZE=1024 发送数据长度 1024Bytes 約為 655KB/Sec// LWIP数据发送,用户应用程序调用此函数来发送数据// tpcb:TCP控制块// 返回值:0,成功;其他,失败// err_t tcp_server_usersent(struct tcp_pcb *tpcb, u16 ..._lwip数据发送,用户应用程序调用此函数来发送数据

大数据——利用Mysql存储过程生成订单数据_mysql存储过程生成合计结算单_Vicky_Tang的博客-程序员宅基地

#如果存在则删除存储过程DROP PROCEDURE IF EXISTS usp_generate_order_data;#指定分隔符为//DELIMITER //#创建存储过程CREATE PROCEDURE usp_generate_order_data()BEGIN #如果存在则删除该临时表 DROP TABLE IF EXISTS tmp_sales_order; #创建临时表,取sales_order的表结构 #where 1=0 表示只取表结构,不需要数._mysql存储过程生成合计结算单

STM32软件复位记录___set_faultmask-程序员宅基地

HAL库软件复位_set_FAULTMASK(1);HAL_NVIC_System_Reset();___set_faultmask

Activiti6.0核心API-程序员宅基地

ProcessEnigne包含IdentitiService 身份服务FormService 表单服务HistoryService 历史服务ManagementService 管理服务RepositoryService 库服务RuntimeService 运行时服务TaskService 任务服务流程引擎及服务graph TDactiviti.cfg.xm...

随便推点

南昌大学利用计算机作弊怎样处分,关于江西南昌大学医学院计算机中心教师组织全国计算机二级考试集体作弊的意见书..._Gonnch的博客-程序员宅基地

江西南昌大学医学院计算机中心教师组织全国计算机二级考试集体作弊1首先在此向你真诚道歉 我确实也没有谩骂也没有指责谁我在论坛里也只是质问他们,想让你们出来说话。他们教师组织集体作弊 开办培训班,可以借用教室吗?学校规定我再去查下2。安排考试座位,一直是考试中心安排是上机考试把他们报了培训班的安排在三楼机房 可以自由翻书 回收站里就有答案 有的人不会打字老师还帮他做题没有报他们培训班的就安排在二楼 ...

c和cpp实现CPU核上绑定固定线程_cpu固定绑定在大核上_埋头干饭ing的博客-程序员宅基地

刚开始接触cpu_set_t时,对_S系列接口有疑问,不明白它存在的意义,明明自己malloc一个cpu_set_t就可以,然后使用各种非_S对其操作,为什么非要有_S系列接口呢?这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。就是进程要在某个给定的CPU上尽量长时间的运行而不被迁移到其他处理器的倾向性。将当前的pid绑定到4,5,6,7核上(大核核超大核)cpu_set_t用来描述CPU的集合,被。设置线程亲和性,将线程绑定到指定CPU核。cpuset:CPU核的集合。_cpu固定绑定在大核上

linux alias 别名应用-程序员宅基地

linux alias 别名应用举例:别名:alias de='cd /home/jboss/standalone/deployments/'alias class='cd /home/jboss/standalone/deployments/pstim.war/WEB-INF/classes/'alias rs='service JBOSS restart'永久生效:vi ~/.bashrc

linux添加大网域,Ubuntu 10.10 Desktop 加入Windows网域-程序员宅基地

前言:为了实现了Linux用户的集中的管理,如果在生产环境中已经实现了Windows的域管理,那么能不能把Ubuntu 桌面操作系统加入到现存的域中实现用户的集中的管理呢,现发现利用likewise-open这个软件包很简单的就能把Ubuntu 10.10 Desktop系统加入到现在的Windows Server 2003做的域中。Likewise Open 是一个Linux、Unix、Mac..._likewise open for linux

Java用gcc命令,gcc命令 - Linux命令大全 | linux教程-程序员宅基地

gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用gcc,目前gcc可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。语法格式gcc [参数] [源文件]常用参数: -o指定生成的输出文件-E仅执行编译预处理-S将C代码转换为汇编代码-wal..._gcc是用来开发java的吗

2022-03-24 k8s-结合csi接口完成redis备库重建_csi.controllerservicecapability_财阀悟世的博客-程序员宅基地

摘要:redis的高可用, 使用local pv导致pod无法重新调度, 本文说明如何使pod可被再次调度, 从而完成备库重建csi相关:csi相关服务的节点图:csi相关创建pvc及挂载:备库重建的时序:aliyun的csi:controllerServer:CreateVolume// CreateVolume csi interfacefunc (cs *controllerServer) CreateVolume(ctx .._csi.controllerservicecapability