java快速查找中位数_用QuickSort快速查找中位数(median)

中位数(median)是一个排好序的元素中中间位置的元素,如果元素个数为偶数,则是中间两个元素的平均值。例如(3,1,5)的中位数是3,而

(2,1,3,5)的中位数是2.5。查找中位数属于Selection

Algorithms的一种。用快速排序可以做到每次divide之后,只需要conquer一个分支,时间复杂度为O(nlogn)。

为便于比较,以下代码包含quicksort的算法实现:

public static float findMedianByQuicksort(int[] A,int left,int right){

//if(right

// throw new IllegalArgumentException();

int rp = sortPivot(A,left,right);

int leftCnt = rp;

int rightCnt = A.length-rp-1;

if(A.length % 2 == 0) {

if(rightCnt == leftCnt+1){

if(right

return A[rp];

}else{

return (A[rp] + findMedianByQuicksort(A,rp+1,right))/2;

}

}else if(rightCnt+1==leftCnt){

if(rp-1

return A[rp];

}else{

return (findMedianByQuicksort(A,left,rp-1)+A[rp])/2;

}

}else if(rightCnt > leftCnt){

return findMedianByQuicksort(A,rp+1,right);

}else{

return findMedianByQuicksort(A,left,rp-1);

}

}else{

if(leftCnt==rightCnt){

return A[rp];

}else if(rightCnt > leftCnt){

return findMedianByQuicksort(A,rp+1,right);

}else{

return findMedianByQuicksort(A,left,rp-1);

}

}

}

public static void quickSort(int[] A,int left,int right){

if(right<=left)

return;

int rp = sortPivot(A,left,right);

quickSort(A,left,rp-1);

quickSort(A,rp+1,right);

}

private static int sortPivot(int[] A,int left,int right){

int pivot = A[left];

int lp=left+1;

int rp=right;

while(lp<=rp){//consider the "equal" case: e.g. [-4 0], -4 is pivot

for(;lp<=right;lp++){

if(A[lp]>pivot){

break;

}

}

for(;rp>=left+1;rp--){

if(A[rp]

break;

}

}

if(lp < rp){

//swap

int tmp = A[lp];

A[lp]=A[rp];

A[rp] = tmp;

lp++;

rp--;

}

}

//swap pivot with the rp's value

A[left]=A[rp];

A[rp] = pivot;

return rp;

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python安装mysql数据库_windows10安装mysql-8.0.13(zip安装)~Python安装mysql

windows10安装mysql-8.0.13(zip安装)安装环境说明系统版本&#xff1a;windows10mysql版本&#xff1a;mysql-8.0.13-winx64.zip下载地址&#xff1a;http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-winx64.zip解压安装包解压路径&#xff1a;D:\develop\soft…

centos 下使用sublime

CentOS 之 Sublime text3 安装及配置&#xff08;不支持中文输入&#xff09; sublime text 的界面友好&#xff0c;自动补全功能也不错。 &#xff08;本来用vimphp_function.txt的形式进行补全的&#xff0c;但是配置后的补全不太满意&#xff0c;放弃了。 具体参见&#xff…

20121108团队博客(苏若)

PS&#xff1a;这本是属于昨晚的帖子&#xff0c;对不住忠仔。现在补上。 忠仔&#xff0c;终于交给了我一个实实在在的任务&#xff0c;很是欣喜&#xff0c;也很是忐忑&#xff0c;生怕自己不能及时完成任务。 好了&#xff0c;废话不多说&#xff0c;步入正题。 接下任务【画…

python 倒排索引 性能_python 实现倒排索引的方法

代码如下&#xff1a;#encoding:utf-8fin open(1.txt, r)建立正向索引:“文档1”的ID > 单词1&#xff1a;出现位置列表&#xff1b;单词2&#xff1a;出现位置列表&#xff1b;…………“文档2”的ID > 此文档出现的关键词列表。forward_index {}for line in fin:line…

pythonnet下载_Python for .NET

Python for .NET 是一个可以让 Python 程序员近乎无缝的集成 .NET 通用语言环境 CLR 和以及为 .NET 开发者提供一个强大的应用脚本工具。通过这个项目你可在 .NET 中完全使用 Python 来编写整个应用&#xff0c;使用 .NET 服务和组件。这个包并没有用 CLR 语言实现一个 Python&…

webService详解

什么是webService WebService&#xff0c;顾名思义就是基于Web的服务。它使用Web(HTTP)方式&#xff0c;接收和响应外部系统的某种请求。从而实现远程调用. 1:从WebService的工作模式上理解的话&#xff0c;它跟普通的Web程序&#xff08;比如ASP、JSP等&#xff09;并没有本…

读《有人负责,才有质量:写给在集市中迷失的一代》总结与感想

在大伙都在吹捧“市集”开发软件的方式的大浪潮下&#xff0c;作者看到了其中的不当之处&#xff0c;发现其中有许多的问题&#xff0c;因此写下这篇文章给予吹捧“市集”的人一个提醒&#xff0c;甚至警告。 在该文章里&#xff0c;作者认为“市集”里的“农民”不可能建造出和…

php 判断是否文件,利用PHP判断文件是否为图片的方法总结

前言在网页设计中&#xff0c;如果需要图片&#xff0c;我们通常拿到的是一个图片的文件名。仅仅通过文件名是无法判断该文件是否是一个图片文件的。或许有的人以为通过后缀名就可以判断&#xff0c;别忘了文件的后缀名是可以随便改动的。更何况&#xff0c;在 Linux 系统下是不…

textedit怎么插入数据_还在手动插入Excel交叉空白行?这个小技巧10秒搞定

导读&#xff1a;前几天有同学在后台提问&#xff0c;怎么快速在Excel中隔行插入一行或者多行空白行&#xff0c;其实在早期我们分享的小视频中有利用过类似的小技巧来制作工资条&#xff0c;今天我们用它来插入空白行。文/ 芒种学院指北针Hello&#xff0c;大家好&#xff0c;…

python制作安装包(setup.py)

1.制作setup.py from distutils.core import setupsetup(nameMyblog,version1.0,descriptionMy Blog Distribution Utilities,authorlujianxing,author_emaillujianxinglujianxing.com,urlhttp://blog.lujianxing.com,py_modules[foo] ) py_modules 定义 需要打包的模块名 2.创…

[Ruby]$: 是什么意思?

ruby comes with a set of predefined variables$: default search path (array of paths)其他Ruby特殊变量&#xff1a; $! 最近一次的错误信息 $ 错误产生的位置 $_ gets最近读的字符串 $. 解释器最近读的行数(line number) $& 最近一次与正则表达式匹配的字符串 $~ 作为…

rocketmq 启动_016【windows版Rocketmq】小白学习Rocketmq单机部署

以前都是听说MQ&#xff0c;或者在别人搭建好的基础上去使用&#xff0c;没有自己动手搭建过&#xff0c;就没有更深入去理解。现在机会来啦.啦啦.啦啦啦......引用自己的CSDN文章href"https://blog.csdn.net/chenzhong2010/article/details/106699590或点击左下角“阅读原…

WPF WebBrowser 加载 html ,出现安全警告, 运行 脚本和 activeX 控件,

对于你的问题&#xff0c;只需要在你的HTML首行添加如下代码即可隐藏安全提示条&#xff1a; <!-- saved from url(0014)about:internet --> 还有一个可选方案是使用Winform的WebBrowser控件&#xff0c;不需要更改HTML代码&#xff0c;也不会出现安全提示&#xff0c;需…

资料下载资源网站

脚本之家&#xff1a;www.jb51.net 转载于:https://www.cnblogs.com/dreammyle/p/3850250.html

php异步处理下载文件,异步处理Excel文件导入【流程图+PHP示例】

面向管理后台的系统中&#xff0c;经常会有文件导入的需求。常规的做法就是同步等待&#xff0c;但在业务关系复杂(多表数据校验)、数据量较大的情况下&#xff0c;管理人员只能等结果&#xff0c;也可能会等到超时。使用异步的话&#xff0c;将导入数据的功能与后端接口解耦&a…

tcp client.cs

public class stateobject { public socket worksocket null; public const int Buffer_Size2048; public byte[] buffer new byte[Buffer_size]; public stringbuilder sb new stringbuilder(); } 转载于:https://www.cnblogs.com/neumik/archive/2012/11/15/2771024.ht…

[python] 之 常用内建函数

本博客仅列举了一些常用的内建函数&#xff0c;欢迎大家补充&#xff01; 1. dir([obj]) 显示对象的属性&#xff0c;若果没有提供参数&#xff0c;则显示全局变量的名字 2. help([obj]) 以一种整齐美观的方式&#xff0c;显示对象的文档字符串&#xff1b;如果没有提供任何参数…

python查询模块所有类_python 小技巧(import模块、查询类继承关系、安装包)

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01;在这里列举一些我使用Python时积累的小技巧。这些技巧是我在使用Python过程中经常使用的。之前很零碎的记在笔记本中&#xff0c;现在整理出来&am…

4.2 access函数实例

int access(const char *filenpath, int mode); 功 能: 确定文件或文件夹的访问权限。 mode&#xff0c;要判断的模式在头文件unistd.h中的预定义如下&#xff1a;#define R_OK 4 /* Test for read permission. */#define W_OK 2 /* Test for write permission. */#define X_OK…

php 简易 blog,PHP实现简易blog的制作

最近&#xff0c;有时间看了点PHP的代码。参考PHP100教程做了简单的blog&#xff0c;这里面简单的记录一下。首先是集成环境&#xff0c;这里选用的WAMP&#xff1a;http://www.wampserver.com/en/首先通过&#xff0c;phpMyAdmin创建一张blog表。纯界面操作&#xff0c;过程比…