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

来源:互联网 发布:市场营销教学软件 编辑:程序博客网 时间:2024/05/22 05:07
【源码】
package cn.edu.nwsuaf.cie.qhs;

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

public class GetGreateK {

    private intinitArray[];
    public int[]getInitArray() {
       returninitArray;
    }
    public voidsetInitArray(int[] initArray) {
      this.initArray = initArray;
    }
    publicGetGreateK(){}
    publicGetGreateK(int[] array){
      this.initArray = array;
    }
    public intrandom_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<length;j++){
         if(initArray[j] < initArray[length-1]){
            this.swap(++i, j);
          }
       }
      this.swap(++i, length-1);
//      System.out.println("------>"+i);
       returni;
    }
    public intgetMaxK(int start,int length,int k){
       intmid;
       if(k<=0) return -1;
       if(length<k) return -1;
       mid =this.random_partion(start, length);
       if (mid ==length-k) return initArray[mid];
       else if(mid< length-k) returngetMaxK(start+mid+1,length-mid-1,k);
       else returngetMaxK(start,mid,k-(length-mid));
    }
   
    public voidswap(int a,int b){
       int temp =initArray[a];
       initArray[a]= initArray[b];
       initArray[b]= temp;
    }
   
    publicstatic void main(String[] args) {
       // TODOAuto-generated method stub
      //12012  945 965  66  232 65 898  56  878 170  13  5
       int[]array;
       intlength;
       int K;
       Scannerscanner = new Scanner(System.in);
      System.out.println("请输入数组长度:");
       length =scanner.nextInt();
       array = newint[length];
       for(int i =0; i < length;i++){
         System.out.println("请输入第"+(i+1)+"个数:");
          array[i] =scanner.nextInt();
       }
      System.out.println("请输入K:");
       K =scanner.nextInt();
       GetGreateKkth = new GetGreateK();
      kth.setInitArray(array);
       int maxK =kth.getMaxK(0,array.length,K);
      System.out.println("maxK---->"+maxK);
    }

}
原创粉丝点击