在1億個(gè)隨機(jī)整數(shù)中找出前1000個(gè)最大的數(shù)

直接上代碼
public class Top1000 {

public static int N = 1000;

public static int LEN = 100000000;
public static int arrs[] = new int[LEN];
public static int result[] = new int[N];
public static int len = result.length;

public static int heapSize = len;

public static void main(String[] args) {
    Random random = new Random();
    for (int i = 0; i < LEN; i++) {
        arrs[i] = random.nextInt(Integer.MAX_VALUE);
    }

    //構(gòu)建初始堆
    for (int i = 0; i < N; i++) {
        result[i] = arrs[i];
    }

    //構(gòu)建小頂堆
    long start = System.currentTimeMillis();
    buildMinHeap();

    for (int i = 0; i < N; i++) {
        if (arrs[i] > result[0]) {
            result[0] = arrs[i];
            minHeap(0);
        }
    }
    System.out.println(LEN + "個(gè)數(shù),求top" + N + ",耗時(shí)" + (System.currentTimeMillis() - start) + "毫秒");
    print();
}

private static void print() {
    for (int a : result) {
        System.out.print(a + ",");
    }
    System.out.println();
}


/**
 * 自底向上構(gòu)建小堆
 */
private static void buildMinHeap() {
    int size = len / 2 - 1;
    for (int i = size; i >= 0; i--) {
        minHeap(i);
    }
}

/**
 * i節(jié)點(diǎn)為根及子樹是一個(gè)小堆
 *
 * @param i
 */
private static void minHeap(int i) {
    int l = left(i);
    int r = right(i);
    int index = i;
    if (l < heapSize && result[i] < result[index]) {
        index = l;
    }
    if (r < heapSize && result[r] < result[index]) {
        index = r;
    }
    if (index != i) {
        int t = result[index];
        result[index] = result[i];
        //遞歸向下構(gòu)建堆
        minHeap(index);
    }
}

private static int left(int i) {
    return 2 * i;
}

private static int right(int i) {
    return 2 * i + 1;
}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容