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

java實(shí)現(xiàn)堆的操作方法(建堆,插入,刪除)

 更新時(shí)間:2017年12月04日 09:55:16   作者:idealemail  
下面小編就為大家分享一篇java實(shí)現(xiàn)堆的操作方法(建堆,插入,刪除),具有很好的參考價(jià)值,希望對(duì)大家有所幫助

如下所示:

import java.util.Arrays;

//小頂堆的代碼實(shí)現(xiàn)

public class Heap {
	// 向下調(diào)整,頂端的大值往下調(diào),主要用于刪除和建堆,i表示要調(diào)整的節(jié)點(diǎn)索引,n表示堆的最有一個(gè)元素索引
	// 刪除時(shí)候,i是0,建堆時(shí)候i從最后一個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)依次往前調(diào)整
	public static void fixDown(int[] data, int i, int n) {
		int num = data[i];
		int son = i * 2 + 1;
		while (son <= n) {
			if (son + 1 <= n && data[son + 1] < data[son])
				son++;
			if (num < data[son])
				break;
			data[i] = data[son];
			i = son;
			son = i * 2 + 1;
		}
		data[i] = num;
	}

	// 向上調(diào)整,小值往上走,用于增加,往上調(diào)整不需要制定最上面的索引,肯定是0
	public static void fixUp(int[] data, int n) {
		int num = data[n];
		int father = (n - 1) / 2;
		// data[father] > num是進(jìn)入循環(huán)的基本條件,father減到0就不會(huì)減少了
		// 當(dāng)n等于0時(shí),father=0;進(jìn)入死循環(huán),所以當(dāng)n==0時(shí),需要跳出循環(huán)
		while (data[father] > num && n != 0) {
			data[n] = data[father];
			n = father;
			father = (n - 1) / 2;
		}
		data[n] = num;
	}

	// 刪除,n表示堆的最后一個(gè)元素的索引
	public static void delete(int[] data, int n) {
		data[0] = data[n];
		data[n] = -1;
		fixDown(data, 0, n - 1);
	}

	// 增加,i表示要增加的數(shù)字,n表示增加位置的索引,是堆的最后一個(gè)元素
	public static void insert(int[] data, int num, int n) {
		data[n] = num;
		fixUp(data, n);
	}

	// 建堆,n表示要建堆的最后一個(gè)元素的索引
	public static void creat(int[] data, int n) {
		for (int i = (n - 1) / 2; i >= 0; i--)
			fixDown(data, i, n);
	}

	public static void main(String[] args) {
		int[] data = { 15, 13, 1, 5, 20, 12, 8, 9, 11 };
		// 測(cè)試建堆
		creat(data, data.length - 1);
		System.out.println(Arrays.toString(data));
		// 測(cè)試刪除
		delete(data, data.length - 1);
		delete(data, data.length - 2);
		System.out.println(Arrays.toString(data));
		// 測(cè)試插入
		insert(data, 3, data.length - 2);
		System.out.println(Arrays.toString(data));

	}

}

以上這篇java實(shí)現(xiàn)堆的操作方法(建堆,插入,刪除)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring框架注解掃描開啟之配置細(xì)節(jié)

    詳解Spring框架注解掃描開啟之配置細(xì)節(jié)

    本篇文章主要介紹了詳解Spring框架注解掃描開啟之配置細(xì)節(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例

    Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例

    這篇文章主要介紹了Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例,DelayQueue是一個(gè)延遲隊(duì)列,插入隊(duì)列的數(shù)據(jù)只有達(dá)到設(shè)置的延遲時(shí)間時(shí)才能被取出,否則線程會(huì)被阻塞,插入隊(duì)列的對(duì)象必須實(shí)現(xiàn)Delayed接口,需要的朋友可以參考下
    2023-12-12
  • Java基于IO流讀取文件的方法

    Java基于IO流讀取文件的方法

    這篇文章主要介紹了Java基于IO流讀取文件的方法,涉及Java文件流操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • SpringBoot中到底該如何解決跨域問(wèn)題

    SpringBoot中到底該如何解決跨域問(wèn)題

    跨域問(wèn)題更是老生常談,隨便用標(biāo)題去google或百度一下,能搜出一大片解決方案,這篇文章主要給大家介紹了關(guān)于SpringBoot中到底該如何解決跨域問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Java 關(guān)鍵字 速查表介紹

    Java 關(guān)鍵字 速查表介紹

    下面小編就為大家?guī)?lái)一篇Java 關(guān)鍵字 速查表介紹。小編覺得聽不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • java中幾種http請(qǐng)求方式示例詳解

    java中幾種http請(qǐng)求方式示例詳解

    在日常工作和學(xué)習(xí)中有很多地方都需要發(fā)送HTTP請(qǐng)求,下面這篇文章主要給大家介紹了關(guān)于java中幾種http請(qǐng)求方式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • SpringMVC請(qǐng)求數(shù)據(jù)詳解講解

    SpringMVC請(qǐng)求數(shù)據(jù)詳解講解

    Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細(xì),本章來(lái)講解SpringMVC如何請(qǐng)求數(shù)據(jù)
    2022-07-07
  • Spring中Cache的使用方法詳解

    Spring中Cache的使用方法詳解

    這篇文章主要介紹了Spring中Cache的使用方法詳解,Spring Cache 是一個(gè)框架,實(shí)現(xiàn)了基于注解的緩存功能,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,Spring Cache 提供了一層抽象,底層可以切換不同的緩存實(shí)現(xiàn),需要的朋友可以參考下
    2024-01-01
  • java中List集合及其遍歷詳解

    java中List集合及其遍歷詳解

    這篇文章主要介紹了java中List集合及其遍歷詳解的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法

    SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法

    說(shuō)到Spring Boot 單元測(cè)試主要有兩個(gè)主流集成分別是Mockito,Junit,這個(gè)各有特點(diǎn),在實(shí)際開發(fā)中,我想要的測(cè)試框架應(yīng)該是這個(gè)框架集成者,本文給大家介紹了SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法,需要的朋友可以參考下
    2024-04-04

最新評(píng)論