TopK问题——找出100万个数中的前K个最大的

大体思路是:

  1. 首先将100万条数据分割,这里演示的分割为100份
  2. 将这一百份中的数据进行快速排序
  3. 将一百分排序好的数据找出最大的组成一个长度为100的新数组
  4. 对新数组进行快速排序
  5. 找出前K个最大的数病输出

废话不多说,下面是代码,也可以通过码云进行下载点击查看

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
/**
 * TopK问题
 * @author 胡海龙
 */
public class QuicklySort{
    public static void main(String[] args) {
        //指定数组,这里可以替换为题目中的100万数据
        int[] arr = {19,18,17,6,5,4,3,2,1,7,8,11,9,10,13,12};
        //将100万数据分割为100份,每份为1万,这里是我的测试数据长度为12,每份分6
        int[][]arrays = splitArr(arr, 8);
        //声明一个大小为分割份数的数组
        int[]finallyArray = new int[arrays.length];
        //对一百份数组进行快速排序
        for(int i=0; ihight){
            return;
        }
        int left = low;
        int right = hight;
        int pivot = array[low];
        while(leftpivot && left> list = new ArrayList<>();
        int count = array.length%subSize == 0 ? array.length/subSize : array.length/subSize + 1;
        for(int i=0; i temp = new ArrayList<>();
            int j = 0;
            while(j subList = list.get(i);
            int[]subArrItem = new int[subList.size()];
            for(int j=0; j

 

你可能感兴趣的:(算法基础)