欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java編程實(shí)現(xiàn)優(yōu)先隊(duì)列的二叉堆代碼分享

 更新時(shí)間:2017年11月09日 15:55:18   作者:zhangqi66  
這篇文章主要介紹了java編程實(shí)現(xiàn)優(yōu)先隊(duì)列的二叉堆代碼分享,具有一定參考價(jià)值,需要的朋友可以了解下。

這里主要介紹的是優(yōu)先隊(duì)列的二叉堆Java實(shí)現(xiàn),代碼如下:

package practice;
import edu.princeton.cs.algs4.StdRandom;
public class TestMain {
  public static void main(String[] args) {
    int[] a = new int[20];
    for (int i = 0; i < a.length; i++) {
      int temp = (int)(StdRandom.random()*100);
      a[i] = temp;
    }
    for (int i : a) {
      System.out.print(i+" ");
    }
    System.out.println();
    PQHeap pq = new PQHeap();
    for (int i = 0; i < 20; i++) {
      pq.insert(a[i]);
    }
    System.out.println();
    for (int i = 0; i < 20; i++) {
      System.out.print(pq.delMax()+" ");
    }
  }
}
/*
 * 優(yōu)先隊(duì)列的堆實(shí)現(xiàn)
 * 二叉堆,每個(gè)元素有兩個(gè)子元素,兩個(gè)子元素均比自己小
 */
class PQHeap{
  private int[] a;
  private int p = 1;
  public PQHeap() {
    a = new int[2];
  }
  /*
   * 插入元素
   */
  public void insert(int elements) {
    if (p == a.length) { resize(a.length*2); }
    a[p++] = elements;
    swim(p - 1); //將剛插入的元素上浮到正確位置
  }
  /*
   * 返回并刪除最大元素
   */
  public int delMax() {
    if (p == a.length/4) { resize(a.length/2); }
    int result = a[1]; //找出最大元素
    exch(1, --p); //將最后一個(gè)元素移到頂端
    a[p] = 0; 
    sink(1); //將剛移上去的元素沉下去,使堆有序
    return result;
  }
  public boolean isEmpty() {
    return p == 0;
  }
  public int size() {
    return p;
  }
  public void show() {
    for (int i : a) {
      System.out.print(i+" ");
    }
    System.out.println();
  }
  /*
   * 上浮元素
   */
  private void swim(int k) { //將元素與父元素比較,比父元素大則換位置
    while (k > 1 && a[k/2] < a[k]) { 
      exch(k/2, k);
      k = k/2;
    }
  }
  private void sink(int k) { //將元素與子元素比較,比子元素小則和兩個(gè)中較大的那個(gè)換位置
    while (2*k < p && (a[k] < a[2*k + 1]) || (a[k] < a[2*k])) {
      if (a[2*k + 1] > a[2*k]) { exch(k, 2*k + 1); k = 2*k + 1; }
      else           { exch(k, 2*k); k = 2*k; }
    }
  }
  private void resize(int length) {
    int[] b = new int[length]; //將數(shù)組長度改變
    for (int i = 0; i < p; i++) { //將數(shù)組復(fù)制
      b[i] = a[i];
    }
    a = b; //讓a指向b的內(nèi)存空間
  }
  /*
   * 交換
   */
  private void exch (int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
  }
}

總結(jié)

以上就是本文關(guān)于java編程實(shí)現(xiàn)優(yōu)先隊(duì)列的二叉堆代碼分享的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:java集合中l(wèi)ist的用法代碼示例Java編程接口調(diào)用的作用及代碼分享、java并發(fā)學(xué)習(xí)之BlockingQueue實(shí)現(xiàn)生產(chǎn)者消費(fèi)者詳解等,有什么問題可以隨時(shí)留言,小編會及時(shí)回復(fù)大家的。感謝朋友們對本站的支持!

相關(guān)文章

  • java 實(shí)現(xiàn)數(shù)組擴(kuò)容與縮容案例

    java 實(shí)現(xiàn)數(shù)組擴(kuò)容與縮容案例

    這篇文章主要介紹了java 實(shí)現(xiàn)數(shù)組擴(kuò)容與縮容案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java IO流操作(PipeInputStream、SequenceInputStream、BufferedInputStream)

    Java IO流操作(PipeInputStream、SequenceInputStream、Buffered

    管道流主要用于線程間通信,分為管道輸入流(PipeInputStream)和管道輸出流(PipeOutputStream),本文介紹了如何通過管道流進(jìn)行數(shù)據(jù)發(fā)送和接收,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • java實(shí)現(xiàn)單人版五子棋游戲

    java實(shí)現(xiàn)單人版五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)五子棋小游戲的相關(guān)資料,十分簡單實(shí)用,有不錯(cuò)的參考借鑒價(jià)值,推薦給大家,需要的朋友可以參考下
    2016-02-02
  • Spring Boot線程池使用的一些實(shí)用心得

    Spring Boot線程池使用的一些實(shí)用心得

    理論上線程越多程序可能更快,但在實(shí)際使用中我們需要考慮到線程本身的創(chuàng)建以及銷毀的資源消耗,以及保護(hù)操作系統(tǒng)本身的目的我們通常需要將線程限制在一定的范圍之類,這篇文章主要給大家介紹了關(guān)于Spring Boot線程池使用的一些實(shí)用心得,需要的朋友可以參考下
    2021-09-09
  • 用java等語言仿360首頁拼音輸入全模糊搜索和自動(dòng)換膚

    用java等語言仿360首頁拼音輸入全模糊搜索和自動(dòng)換膚

    這篇文章主要為大家詳細(xì)介紹了仿360首頁支持拼音輸入全模糊搜索和自動(dòng)換膚的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 詳解Springboot應(yīng)用啟動(dòng)以及關(guān)閉時(shí)完成某些操作

    詳解Springboot應(yīng)用啟動(dòng)以及關(guān)閉時(shí)完成某些操作

    這篇文章主要介紹了詳解Springboot應(yīng)用啟動(dòng)以及關(guān)閉時(shí)完成某些操作,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • ArrayList刪除集合中某一屬性相同的元素方法(推薦)

    ArrayList刪除集合中某一屬性相同的元素方法(推薦)

    下面小編就為大家?guī)硪黄狝rrayList刪除集合中某一屬性相同的元素方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • 利用Java Apache POI 生成Word文檔示例代碼

    利用Java Apache POI 生成Word文檔示例代碼

    本篇文章主要介紹了利用Java Apache POI 生成Word文檔示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java注釋代碼執(zhí)行方法解析

    Java注釋代碼執(zhí)行方法解析

    這篇文章主要介紹了Java注釋代碼執(zhí)行方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java模擬qq軟件的詳細(xì)過程

    Java模擬qq軟件的詳細(xì)過程

    這篇文章主要為大家詳細(xì)介紹了用Java實(shí)現(xiàn)模擬QQ,實(shí)現(xiàn)了消息通信+登陸界面美化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論