微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

求数组中的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<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] 举报,一经查实,本站将立刻删除。

相关推荐