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.pswp.cn/news/260258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260258.shtml
英文地址,請注明出處:http://en.pswp.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;過程比…