package com.interview.algorithms.array; import com.interview.utils.ArrayUtil; /** * Created_By: stefanie * Date: 14-10-24 * Time: 下午2:38 */ public class C4_71_FindKMaxNumber_Heap { public static int[] find(int[] array, int k){ int[] minHeap = new int[k]; for(int i = 0; i < k; i++) { minHeap[i] = array[i]; swim(minHeap, i); } for(int i = k; i < array.length; i++){ if(array[i] > minHeap[0]) { minHeap[0] = array[i]; sink(minHeap, 0); } } return minHeap; } private static void swim(int[] heap, int i){ int p = (i - 1) / 2; while(p >= 0 && heap[p] > heap[i]){ ArrayUtil.swap(heap, p, i); i = p; p = (i - 1)/2; } } private static void sink(int[] heap, int i){ int smaller = 2 * i + 1; while(smaller < heap.length){ if(smaller + 1 < heap.length && heap[smaller + 1] < heap[smaller]) smaller++; if(heap[smaller] >= heap[i]) break; ArrayUtil.swap(heap, smaller, i); i = smaller; smaller = 2 * i + 1; } } }