顺序统计、中值 计算中位数---随机选择算法

random-partition 

http://open.163.com/movie/2010/12/J/J/M6UTT5U0I_M756SE0JJ.html

随机选择算法获得第i小的中位数

代码:

public static void main(String[] args) {
        //[1, 5, 9, 12, 15, 16, 30, 45, 23, 20]
        int[] arr = {12,20,5,16,15,1,30,45,23,9};
        int i = randomized_select(arr, 0, arr.length - 1, 5);
        System.out.println("=========================");
        System.out.println(i);

    }
    public static int randomized_select(int[] arr,int p,int r,int i){
        if(p==r){
            return arr[p];
        }
        int q=partition(arr,p,r);
        int k=q-p+1;
        if(i==k){
            return arr[q];
        }else if(iright
        while(left<=right){
            while(arr[left]privo){
                right--;
            }
            if(left<=right){
                swap(arr,left,right);
                System.out.println(Arrays.toString(arr));
                left++;
                right--;
            }
        }

        return left;
    }
    public static void swap(int[] arr,int i,int j){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;

    }

 

你可能感兴趣的:(算法)