集册 Java实例教程 insert会将项目插入堆中

insert会将项目插入堆中

欢马劈雪     最近更新时间:2020-01-02 10:19:05

576
insert将把项目插入堆中


//package com.nowjava;
/*
 from NowJava.com 
*/


public class Main {

    /**

     * insert will insert the item into the heap

     * 

     * @param heap

     *            is the heap into which item is to be inserted in

     * @param item

     *            is the item to be inserted into heap

     * @param heapSize

     *            the size of the heap

     * @return return the new heap

     */

    public static Comparable[] insert(Comparable[] heap, Comparable item,

            int heapSize) {

        Comparable[] nHeap = new Comparable[heapSize + 2];

        for (int i = 1; i <= heapSize; i++) {

            nHeap[i] = heap[i];

        }

        nHeap[heapSize + 1] = item;

        buildHeap(nHeap, heapSize + 1);

        return nHeap;

    }/* 来自 时 代 J a v a - nowjava.com*/


    /**

     * builds the heap using the heapify method

     * 

     * @param heap

     *            is the heap to be built

     * @param heapSize

     *            is the size of the heap

     */

    public static void buildHeap(Comparable[] heap, int heapSize) {

        for (int i = heapSize / 2; i > 0; i--) {

            heapify(heap, i, heapSize);

        }

    }


    /**

     * heapifies starting from a given node

     * 

     * heapifying checks each child of the node and if it is greater than the

     * parent it swaps the two and heapifies the child

     * 

     * @param heap

     *            the heap to heapify in

     * @param index

     *            the index of the node to heapify

     * @param heapSize

     *            the size of the heap

     */

    public static void heapify(Comparable[] heap, int index, int heapSize) {

        int leftIndex = 2 * index;

        int rightIndex = 2 * index + 1;

        if (leftIndex <= heapSize) {

            if (heap[leftIndex].compareTo(heap[index]) > 0) {

                swap(heap, index, leftIndex);

                heapify(heap, leftIndex, heapSize);

            }

        }

        if (rightIndex <= heapSize) {

            if (heap[rightIndex].compareTo(heap[index]) > 0) {

                swap(heap, index, rightIndex);

                heapify(heap, rightIndex, heapSize);

            }

        }

    }


    
展开阅读全文