1. 程式人生 > >查詢中位數(java 快速排序)

查詢中位數(java 快速排序)

中位數(又稱中值,英語: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