编程之美2.5寻找最大的K个数 解法二 Java版

来源:互联网 发布:七日杀低配置优化 编辑:程序博客网 时间:2024/05/21 14:56

先实现了一下快速排序,代码就不贴了,网上可以找到不错的

思路跟书上的解法二伪代码一样


/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package Test;import java.util.ArrayList;import java.util.List;import java.util.Random;/** * * @author Administrator */public class SearchKNumbers {    public static void main(String[] args) {        int[] arry = {45, 67, 305, 12, 78, 102, 29, 88, 91, 55, 100, 38, 99, 59, 203, 12};        int k = 4;        List<Integer> list = new ArrayList<Integer>();        for (int i = 0; i < arry.length; i++) {            list.add(arry[i]);        }        List l = Kbig(list, k);        for (int i = 0; i < l.size(); i++) {            System.out.print(l.get(i) + " ");        }    }    private static List Kbig(List<Integer> list, int k) {        if (k <= 0) {            return null;        }        if (list.size() <= k) {            return list;        }                List l = Partition(list);        List<Integer> la = Kbig((List<Integer>) l.get(0), k);        List<Integer> lb = Kbig((List<Integer>) l.get(1), k - la.size());        if (lb != null)             la.addAll(lb);                return la;    }    private static List<List<Integer>> Partition(List<Integer> list) {        List<Integer> sa = new ArrayList();        List<Integer> sb = new ArrayList();        Random random = new Random();        int result = random.nextInt(list.size());        int p = list.get(result);        for (int i = 0; i < list.size(); i++) {            if (list.get(i) > p) {                sa.add(list.get(i));            }            if (list.get(i) < p) {                sb.add(list.get(i));            }        }        if (sa.size() < sb.size()) {            sa.add(p);        } else {            sb.add(p);        }        List<List<Integer>> l = new ArrayList();        l.add(sa);        l.add(sb);        return l;    }   }


0 0
原创粉丝点击