求数组中的K大数(时间复杂度控制…

【源码】
package cn.edu.nwsuaf.cie.qhs;

import java.util.Random;
import java.util.Scanner;

public class GetGreateK {

    private int initArray[];
    public int[] getInitArray() {
        return initArray;
    }
    public void setInitArray(int[] initArray) {
        this.initArray = initArray;
    }
    public GetGreateK(){}
    public GetGreateK(int[] array){
        this.initArray = array;
    }
    public int random_partion(int start,int length){
        Random rand = new Random();
        int index = rand.nextInt(length);
        int i = start-1;
        int j = start;
        this.swap(index, length-1);
        for(j=start;j             if(initArray[j] < initArray[length-1]){
                this.swap(++i, j);
            }
        }
        this.swap(++i, length-1);
//        System.out.println("------>"+i);
        return i;
    }
    public int getMaxK(int start,int length,int k){
        int mid;
        if (k<=0) return -1;
        if (length         mid = this.random_partion(start, length);
        if (mid == length-k) return initArray[mid];
        else if(mid < length-k) return getMaxK(start+mid+1,length-mid-1,k);
        else return getMaxK(start,mid,k-(length-mid));
    }
   
    public void swap(int a,int b){
        int temp = initArray[a];
        initArray[a] = initArray[b];
        initArray[b] = temp;
    }
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //12012  3  945  965  66  232  65  7  8  898  56  878  170  13  5
        int[] array;
   

你可能感兴趣的:(JavaSE程序)