您的位置:首页 > 编程语言 > Java开发

查找中位数(java 快速排序)

2016-10-31 16:14 204 查看
中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。

java代码:

import java.util.*;
/**
* @version 1.0
* @author zhouxiaowu
*
*/
public class MedianFinder {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("please input some numbers:");
String str = sc.nextLine();
String[] s = str.split("\\s+");
int[] num= new int[s.length];
for(int i=0;i<s.length;i++){
num[i]=Integer.parseInt(s[i]);
}
double med=medianFinder(num);
System.out.println("median is :"+med);

}
public static double medianFinder(int[] num){
int mid;
int len=num.length;
double med;

if(len%2==0){
mid=len/2;
med=(select(num,mid)+select(num,mid-1))/2.0;
}
else{
mid=(len-1)/2;
med=(double)select(num,mid);
}
return med;
}
public static int select(int[] num,int k){
int low=0;
int high=num.length-1;
int j=0;
int val=0;
while(low<high){
j=partition(num,low,high);
if(j==k){
val=num[j];
break;
}else if(j>k){
high=j-1;
}else{
low=j+1;
}
}
return val;

}
public static int partition(int[] num,int low,int high){
int i=low;
int j=high;
int temp=num[i];
while(i<j){
while(i<j && temp<=num[j])
j--;
if(i<j)
num[i++]=num[j];
while(i<j && temp>=num[i])
i++;
if(i<j)
num[j--]=num[i];
}
num[i]=temp;
return i;
}

}


测试结果:

input:4 6 8 1 9 7 5

output:median is :6.0

input:4 3 6 1 9 6

output:median is :5.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息