最小堆的Java实现

来源:互联网 发布:姚明10-11赛季数据 编辑:程序博客网 时间:2024/06/05 03:22
public class Heap {    //创建堆    public void createHeap(int[] array, int n) {        int i = n;        for( i = (i-2) / 2; i >= 0; --i) {            AdjustHeap(array, i, n);        }    }    //调整堆    public void AdjustHeap(int[] array, int top, int n) {        //System.out.println("===============");        int left = 2 * top + 1;        int temp = array[top];        while (left < n) {            if(left + 1 < n && array[left] > array[left+1]) ++left;            System.out.println(array[left] + " " + temp);            if(array[left] > temp) break;            System.out.println(array[top] + " " + array[left]);            array[top] = array[left];            top = left;            left = 2 * left + 1;        }        array[top] = temp;    }    public void DeleteHeap(int[] array, int n) {        array[0] = array[n-1];        AdjustHeap(array, 0, n-1);    }    public void InsertHeap(int[] array, int n, int num) {        int i , j;        array[n] = num;        i = n;        j = (n-1) / 2;        while (j >= 0 && i != 0) {            if(array[j] <= num) break;            array[i] = array[j];            i = j;            j = (i-1) / 2;        }        array[i] = num;    }    public static void main(String[] args) {        int[] num = new int[]{10,9, 8, 7,6, 5, 4, 3, 2, 1};        Heap heap = new Heap();        heap.createHeap(num, 10);        for(int i = 0; i < 10; ++i) {            System.out.print(num[i] + " ");        }    }}
原创粉丝点击