首页 > 代码库 > 获取一亿数据获取前100个最大值
获取一亿数据获取前100个最大值
package cn.usst.tophundred.quicksort; import java.util.Random; /** 获取一亿数据获取前100个最大值 1. 假设数组为 array[N] (N = 1 亿),首先利用quicksort的原理把array分成两个部分,左边部分比 array[N - 1] (array中的最后一个值,即pivot) 大, 右边部分比pivot 小。然后,可以得到 array[array.length - 1] (即 pivot) 在整个数组中的位置,假设是 k. 2. 如果 k 比 99 大,我们在数组[0, k - 1]里找前 100 最大值。 (继续递归) 3. 如果 k 比 99 小, 我们在数组[k + 1, ..., N ]里找前 100 - (k + 1) 最大值。(继续递归) 4. 如果 k == 99, 那么数组的前 100 个值一定是最大的。(退出) */ public class TopHundredQuickSort { public static void main(String[] args) { // the size of the array int number = 100000000; // the top k values int k = 100; // the range of the values in the array int range = 1000000001; // input for minHeap based method int[] array = new int[number]; Random random = new Random(); for(int i=0; i<number; i++){ array[i] = random.nextInt(range); } TopHundredQuickSort topHundred = new TopHundredQuickSort(); // start time long t1 = System.currentTimeMillis(); topHundred.tophundred(array, 0, array.length-1, k); // end time long t2 = System.currentTimeMillis(); System.out.println("The total execution time of quicksort based method is" + (t2-t1) + " millisecond"); // print out the top k largest values in the top array System.out.println("The top " + k + " largest values are:"); for(int i=0; i<k; i++){ System.out.println(array[i]); } } private void tophundred(int[] array, int start, int end, int k) { int switchPointer = start; // array最后一个值作为pivot int pivot = array[end]; for(int i=start; i<end; i++){ if(array[i] >= pivot){ swap(array, switchPointer, i); switchPointer++; } } // 交换后 array左边的值比pivot大 右边的值比pivot小 swap(array, end, switchPointer); if(switchPointer < k-1){ tophundred(array, switchPointer+1, end, k); }else if(switchPointer == k-1){ return; }else{ tophundred(array, 0, switchPointer-1, k); } } private void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } }
获取一亿数据获取前100个最大值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。