最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java如何實現(xiàn)小頂堆和大頂堆

 更新時間:2021年06月20日 16:51:57   作者:HSBhuang  
今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著Java如何實現(xiàn)小頂堆和大頂堆展開,文中有非常詳細的解釋及代碼示例,需要的朋友可以參考下

大頂堆

每個結點的值都大于或等于其左右孩子結點的值

小頂堆

每個結點的值都小于或等于其左右孩子結點的值

對比圖

在這里插入圖片描述

實現(xiàn)代碼

public class HeapNode{
    private int size;//堆大小
    private int[] heap;//保存堆數(shù)組

    //初始化堆
    public HeapNode(int n) {
        heap = new int[n];
        size = 0;
    }

    //小頂堆建堆
    public void minInsert(int key){
        int i = this.size;
        if (i==0) heap[0] = key;
        else {
            while (i>0 && heap[i/2]>key){
                heap[i] = heap[i/2];
                i = i/2;
            }
            heap[i] = key;
        }
        this.size++;
    }

    //大頂堆建堆
    public void maxInsert(int key){
        int i = this.size;
        if (i==0) heap[0] = key;
        else {
            while (i>0 && heap[i/2]<key){
                heap[i] = heap[i/2];
                i = i/2;
            }
            heap[i] = key;
        }
        this.size++;
    }

    //小頂堆刪除
    public int minDelete(){
        if (this.size==0) return -1;
        int top = heap[0];
        int last = heap[this.size-1];
        heap[0] = last;
        this.size--;
        //堆化
        minHeapify(0);
        return top;
    }

    //大頂堆刪除
    public int maxDelete(){
        if (this.size==0) return -1;
        int top = heap[0];
        int last = heap[this.size-1];
        heap[0] = last;
        this.size--;
        //堆化
        maxHeapify(0);
        return top;
    }

    //小頂堆化
    public void minHeapify(int i){
        int L = 2*i,R=2*i+1,min;
        if (L<=size && heap[L] < heap[i]) min = L;
        else min = i;
        if (R <= size && heap[R] < heap[min]) min = R;
        if (min!=i){
            int t = heap[min];
            heap[min] = heap[i];
            heap[i] = t;
            minHeapify(min);
        }
    }

    //大頂堆化
    public void maxHeapify(int i){
        int L = 2*i,R=2*i+1,max;
        if (L<=size && heap[L] > heap[i]) max = L;
        else max = i;
        if (R <= size && heap[R] > heap[max]) max = R;
        if (max!=i){
            int t = heap[max];
            heap[max] = heap[i];
            heap[i] = t;
            maxHeapify(max);
        }
    }

    //輸出堆
    public void print(){
        for (int i = 0; i < this.size; i++) {
            System.out.print(heap[i]+" ");
        }
        System.out.println();
    }
}

測試

public class Heap {
    static int[] a = {5,3,6,4,2,1};
    static int n = a.length;
    public static void main(String[] args){
        HeapNode heapNode = new HeapNode(n);
        for (int i = 0; i < n; i++) {
            heapNode.maxInsert(a[i]);
        }
        heapNode.print();
        for (int i = 0; i < n; i++) {
            int min = heapNode.maxDelete();
            System.out.print("堆頂:"+min+" 剩下堆元素:");
            heapNode.print();
        }
    }
}

結果

在這里插入圖片描述

到此這篇關于詳解Java如何實現(xiàn)小頂堆和大頂堆的文章就介紹到這了,更多相關Java實現(xiàn)小頂堆和大頂堆內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 全面解釋Java中的serialVersionUID

    全面解釋Java中的serialVersionUID

    以下是對Java中的serialVersionUID進行了全面的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • Java 重入鎖和讀寫鎖的具體使用

    Java 重入鎖和讀寫鎖的具體使用

    這篇文章主要介紹了Java 重入鎖和讀寫鎖的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 解決springboot啟動Logback報錯ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rena

    解決springboot啟動Logback報錯ERROR in ch.qos.logback.cla

    這篇文章主要介紹了解決springboot啟動Logback報錯ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rena問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java關于BeabUtils.copyproperties的用法

    Java關于BeabUtils.copyproperties的用法

    這篇文章主要介紹了Java關于BeabUtils.copyproperties的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot的啟動速度優(yōu)化

    SpringBoot的啟動速度優(yōu)化

    隨著我們項目的不斷迭代 Bean 的數(shù)量會大大增加,如果都在啟動時進行初始化會非常耗時,本文主要介紹了SpringBoot的啟動速度優(yōu)化,感興趣的可以了解一下
    2023-09-09
  • jenkins按模塊進行構建遇到的問題及解決方案

    jenkins按模塊進行構建遇到的問題及解決方案

    這篇文章主要介紹了jenkins按模塊進行構建的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot 如何整合 ES 實現(xiàn) CRUD 操作

    SpringBoot 如何整合 ES 實現(xiàn) CRUD 操作

    這篇文章主要介紹了SpringBoot 如何整合 ES 實現(xiàn) CRUD 操作,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • Java?Runtime的使用詳解

    Java?Runtime的使用詳解

    這篇文章主要介紹了Java?Runtime的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實現(xiàn)按行讀取大文件

    Java實現(xiàn)按行讀取大文件

    這篇文章主要介紹了Java實現(xiàn)按行讀取大文件的方法的小結,非常的簡單實用,有需要的小伙伴尅參考下。
    2015-05-05
  • 淺談異常結構圖、編譯期異常和運行期異常的區(qū)別

    淺談異常結構圖、編譯期異常和運行期異常的區(qū)別

    下面小編就為大家?guī)硪黄獪\談異常結構圖、編譯期異常和運行期異常的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論

康马县| 承德县| 信阳市| 永清县| 沙坪坝区| 时尚| 汕尾市| 闵行区| 淮安市| 车致| 通榆县| 库伦旗| 华宁县| 青川县| 炎陵县| 鄂伦春自治旗| 错那县| 临澧县| 铜鼓县| 简阳市| 井冈山市| 铁力市| 林州市| 开鲁县| 扎鲁特旗| 江城| 恭城| 余干县| 天水市| 南皮县| 淮安市| 松潘县| 台中县| 临高县| 饶平县| 石屏县| 南溪县| 乃东县| 涞源县| 文登市| 乡宁县|