【源码】 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<length;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<k) return -1; 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; int length; int K; Scanner scanner = new Scanner(system.in); System.out.println("请输入数组长度:"); length = scanner.nextInt(); array = new int[length]; for(int i = 0; i < length;i++){ System.out.println("请输入第"+(i+1)+"个数:"); array[i] = scanner.nextInt(); } System.out.println("请输入K:"); K = scanner.nextInt(); GetGreateK kth = new GetGreateK(); kth.setinitArray(array); int maxK = kth.getMaxK(0,array.length,K); System.out.println("maxK---->"+maxK); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。