package cn.edu.nwsuaf.cie.qhs; import java.util.Random; import java.util.Scanner; // // * // * @author 静寞小森(沧海森林) // * Our goal is to get the number which is bigger than other k. // * So we program this program to reach our goal. // * // 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)+start; int i = start-1; int j = start; System.out.println("index="+index+";start="+start+";length="+length); this.swap(index,start+length-1); for(j=start;j<start+length;j++){ if(initArray[j] < initArray[start+length-1]){ this.swap(++i,j); System.out.println("i="+i+";j="+j); } } this.swap(++i,start+length-1); System.out.println("i="+i+";start+length-1="+(start+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 -2; mid = this.random_partion(start,length); if ((mid-start) == length-k){System.out.println("----->this is the first!!!!!"); return initArray[mid];} else if((mid-start) < length-k){System.out.println("----->this is the second!!!!!"); return getMaxK(mid+1,length-mid+start-1,k);} else{System.out.println("----->this is the third!!!!!"); return getMaxK(start,mid-start,k-(length-mid+start));} } 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 = {12012,3,945,965,66,232,65,7,8,898,56,878,170,13,5}; int length; int K = 9; // 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] 举报,一经查实,本站将立刻删除。