寻找第k元

要求:给定一个数组array[n],寻找大小排在第k的元素

思路一:最直接的思路就是先排序,这样可以直接通过数组下标找到第k大的元素,最好的快速排序时间复杂度为O(nlogn)。

思路二:我们可以在快速排序的基础上进行改进,即运用快速排序框架,不过快速排序中的基准元素,我们采用随机划分而不是快速排序那样指定为一个固定的值。此方法时间复杂度为O(n)

此思路的代码如下:
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<time.h>
using namespace std;
int random(int p,int r)
{return (rand()%(r-p+1)+p);}
int partion(float a[],int p,int r)
{int x = a[r];  int i=p-1;  for(int j = p;j<r;++j){  if(a[j]<=x){  ++i;  swap(a[i],a[j]);  }  }  swap(a[i+1],a[r]);  return i+1;   
}
int part(float a[],int p,int r)
{int i=random(p,r);swap(a[i],a[p]);return partion(a,p,r);
}//该算法的主体框架为快速排序的框架,但与快速排序不同的是,快速排序是通过递归框架
//对数组进行排序,但此算法通过递归框架只对数组中的第k元进行筛选,所以递归的出口不同
//快速排序中的递归出口为if(high>low),但该函数的递归出口为if(k-1==i-p)
//与快速排序相同的是都存在一个划分过程
//如果单是求第k元的话,该函数的参数可以简化,即p=0,这样j==i
float select(float a[],int p,int r,int k)
{//在数组a中从下标p到r中求第k小的元素if(p==r){return a[p];}int i=part(a,p,r);//对数组a随机划分int j=i-p;//+1;//此处之所以要i-p因为该函数从数组p下标开始,而不一定从0开始if(k-1==j)//因为数组下标从0开始,所以第k小元素下标为k-1return a[i];//递归出口,返回该元素else if(k-1<j)return select(a,p,i-1,k);elsereturn select(a,i+1,r,k-j-1);}
void bubble(float a[], int n)
{int i,flag=1;for(i=1;i<=n-1&&flag;i++){flag=0;for(int j=0;j<n-i;j++){if(a[j+1]<a[j]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;flag=1;}}}
} 
int main()
{int n,t,i,j=0;cout<<"请输入元素的个数n"<<endl;cin>>n;
//	float *p=(float *)malloc(n*sizeof(float));float *p=new float[n];cout<<"请输入每个元素的值"<<endl;for(i=0;i<n;i++){cin>>p[i];}cout<<"请输入要寻找第k元的k值"<<endl;int k;cin>>k;cout<<select(p,0,n-1,k)<<endl;return 1;
}
程序运行结果如下:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620332.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何确定K-means算法中的k值?

1. K-means算法 k-means算法是机器学习中常用的聚类算法&#xff0c;原理简单实现容易&#xff0c;内存占用量也比较小。但使用这个方法时&#xff0c;需要事先指定将要聚合成的簇数。 在先验知识缺乏的情况下&#xff0c;想要确定是非常困难的。目前常用的用来确定的方法主要…

上证综指K线图

分享一下&#xff0c;7月份的学习成果。 使用SQL和Python绘制的上证指数K线图&#xff0c;在此Mark一下~千里之行&#xff0c;始于足下&#xff0c;要继续加油呀~ 具体代码略了&#xff0c;如有感兴趣的小伙伴&#xff0c;可以私信交流。

Django项目第一次打开加载不出css文件

你需要找到setting.py如下部分 修改你存放css文件和js等文件的目录 指定正确&#xff0c;本地就能跑了

QQ秀,销金窟

我已经很久没有用QQ秀了&#xff0c;一直坦然地穿着小裤衩和小背心&#xff0c;觉得这是成熟人士的标志。昨晚上听豆荚说她又买了大把Q币&#xff0c;准备去买QQ秀和会员&#xff0c;让我有点心动&#xff0c;于是跑到QQ秀官网去看了一下。 天哪&#xff0c;一年半载不见&…

机器学习入门——K近邻算法

引言 本文介绍本系列的第一个机器学习算法——K近邻算法(K-Nearest Neighbors,knn)。 它的思想很简单&#xff0c;用到的数学知识也比较少(只用到了求距离公式)&#xff0c;效果好。 本文还会涉及到和应用机器学习相关的问题的处理方式。 上一篇&#xff1a;机器学习入门——…

K-mean clustering(K均值聚类算法)

一、聚类与分类的区别 分类&#xff1a;类别已知&#xff0c;通过对已知分类的数据进行训练和学习&#xff0c;找到这些不同类的特征&#xff0c;再对未分类的数据进行分类。是有监督学习。 聚类&#xff1a;事先不知道数据会分为几类&#xff0c;通过聚类分析将数据聚合成几…

编程初学者如何在GitHub寻找适合自己的小项目?

即使作为编程新手&#xff0c;刚刚接触GitHub&#xff0c;也建议你从最简单的项目入手&#xff0c;而不是单纯研究大量理论。 这个⭐18.5k的优&#xff08;宅&#xff09;秀&#xff08;男&#xff09;项目&#xff1a;komeiji-satori/Dress就非常适合初学者Pick。 作为全球最…

K-means方法总结(附代码)

K-means方法总结&#xff08;附代码&#xff09; 这一周事情较多&#xff0c;不得已先放弃了验证码分割部分的卷积神经网络的学习&#xff0c;先写两篇关于聚类方法的内容&#xff0c;分别是k-means和混合高斯模型。因为之前的论文中有关于k-means方法的字符分割方法&#xff…

【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2&…

2023.08.27 学习周报

文章目录 摘要文献阅读1.题目2.重点3.引言4.方法5.实验结果6.结论 深度学习Majorization-Minimization算法1.基本思想2.要求3.示意图 总结 摘要 This week, I read a computer science on the prediction of atmospheric pollutants in urban environments based on coupled d…

Xposed API详解

Xposed API详解 Hook修改变量Hook普通方法回调函数XC_MethodHookXC_MethodReplacement Hook获取参数与返回值获取参数获取返回值 Hook构造函数无参构造有参构造 Hook复杂函数Hook自定义类参数Hook替换函数与函数置空替换函数函数置空 Hook内部类与匿名类内部类匿名类 Xposed主动…

【Python】PySpark

前言 Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、PB乃至EB级别的海量数据…

Xposed常用逆向函数

1. 创建Xposed工程 在Android Studio中新建一个app工程&#xff0c;修改其中的 AndroidManifest.xml 文件&#xff0c;在<application></application>标签中增加如下代码 <meta-dataandroid:name"xposedmodule"android:value"true" />…

Xposed环境安装

一、Xposed 框架实现 Hook 的原理介绍 Zygote是Android的核心&#xff0c;每运行一个app&#xff0c;Zygote就会fork一个虚拟机实例来运行app&#xff0c; Xposed Framework深入到了Android核心机制中&#xff0c;通过改造Zygote来实现一些很牛逼的 功能。Zygote的启动配置在i…

Xposed 使用教程

Xposed作为Android开发中的神器&#xff0c;功能强大之处就不做过多介绍了&#xff0c;本文主要讲解一些常用的API&#xff0c;基本包含常用的Hook操作。 Hook静态变量 Class cla XposedHelpers.findClass(claName, loadPackageParam.classLoader); XposedHelpers.setStatic…

xposed android 4.4.2,xposed新版54

xposed新版54是一款好用的系统工具&#xff0c;软件安全&#xff0c;无需root权限&#xff0c;下载相对应功能板块即可在应用内实现应用多开、虚拟步数、以及qq&#xff0c;微信等多种功能&#xff0c;方便又实用&#xff01; 软件介绍 系统功能增强&#xff0c;如后台管制&…

Xposed安装

记录一下自己安装xposed的过程。网上很多xposed的安装教程&#xff0c;里面各种都是直接跳转到官网地址下载Xposed&#xff0c;但国内打不开&#xff0c;提示如下&#xff1a; 因此只能下载对应版本zip包进行本地安装&#xff0c;下载对应zip包放到“ /sdcard/Android/data/de…

android8 检测xposed,Xposed检测与自定义Xposed

Xposed检测与自定义Xposed 前言: Xposed检测 1、遍历App安装列表检测 2、自造异常检测堆栈信息。 3、检查关键Java方法是否变为native方法 4、反射XposedHelper类和XposedBridge类 5、检测Xposed相关文件 6、Root检测 7、安全建议 自定义Xposed 一、修改XposedBridge.jar包名 …

xposed android4.4,应用管理Xposed

应用管理Xposed是一款安卓应用管理xposed模块&#xff0c;可以帮助你更好的管理自己手机的各种应用的权限&#xff0c;应用使用需要先阅读了解一下使用的方法&#xff0c;非常强大的一款插件&#xff0c;欢迎大家前来下载。 新版特性 1. 为部分列表也添加基本筛选。 2. 在主页显…

android xposed 简书,Xposed 入坑篇

device-2018-04-12-101001.png 接下来开始敲代码了 美滋滋(皮一下很开心) 上一张整个工程的图 QQ截图20180412102021.png 以下是Test和Tutorial的代码 package com.zed.xposed.demo; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.Xpo…