zoukankan      html  css  js  c++  java
  • Binary Min — Max Heap

    http://algorithms.tutorialhorizon.com/binary-min-max-heap/

    import java.util.*;
    import java.lang.*;
    
    public class Test {
        public static void main(String args[]){
    		int arrA [] = {3,2,1,7,8,4,10,16,12};
    		System.out.print("Original Array : ");
    		for(int i=0;i<arrA.length;i++){
    			System.out.print("  " + arrA[i]);
    		}
    		minHeap m = new minHeap(arrA.length);
    		System.out.print("
    Min-Heap : ");
    		m.createHeap(arrA);		
    		m.display();
    		System.out.print("Extract Min :");
    		for(int i=0;i<arrA.length;i++){
    			System.out.print("  " + m.extractMin());
    		}
    		
    	}
    }
    class minHeap {
    	public int size;
    	public int [] mH;
    	public int position;
    	public minHeap(int size){
    		this.size=size;
    		mH = new int [size+1];
    		position = 0;
    	}
    	public void createHeap(int [] arrA){
    		if(arrA.length>0){
    			for(int i=0;i<arrA.length;i++){
    				insert(arrA[i]);
    			}
    		}		
    	}
    	public void display(){
    		for(int i=1;i<mH.length;i++){
    			System.out.print(" " + mH[i]);			
    		}
    		System.out.println("");
    	}
    	public void insert(int x){
    		if(position==0){
    			mH[position+1]=x;
    			position = 2;
    		}else{
    			mH[position++]=x;
    			bubbleUp();
    		}
    	}
    	public void bubbleUp(){
    		int pos = position-1;
    		while(pos>0 && mH[pos/2]>mH[pos]){
    			int y = mH[pos];
    			mH[pos]=mH[pos/2];
    			mH[pos/2] = y;
    			pos = pos/2;
    		}
    	}
    	public int extractMin(){
    		int min = mH[1];
    		mH[1]=mH[position-1];
    		mH[position-1]=0;
    		position--;		
    		sinkDown(1);
    		return min;
    	}
    	
    	public void sinkDown(int k){int a = mH[k];
    		int smallest =k;
    		if(2*k<position && mH[smallest]>mH[2*k]){
    			smallest = 2*k;
    		}
    		if(2*k+1<position && mH[smallest]>mH[2*k+1]){
    			smallest = 2*k+1;
    		}
    		if(smallest!=k){
    			swap(k,smallest);
    			sinkDown(smallest);
    		}
    	}
    	public void swap(int a, int b){
    		//System.out.println("swappinh" + mH[a] + " and " + mH[b]);
    		int temp = mH[a];
    		mH[a] = mH[b];
    		mH[b] = temp;
    	}
    }
    

      

  • 相关阅读:
    Lambda表达式
    工具类:mybatis中使用Threadlocal开启session及关闭session
    构造函数
    window phone ListBox多选
    ZOJ 3681 ZJU2013年01月月赛F题 E Cup 2
    2012百度之星冬季赛第四场第二题 度熊的复仇
    HDU 4476 HDOJ Cut the rope
    HDU 4475 HDOJ Downward paths
    2012百度之星冬季赛第二场第二题 消去游戏I
    ZOJ 3684 ZJU2013年01月月赛I题 Destroy
  • 原文地址:https://www.cnblogs.com/apanda009/p/7786489.html
Copyright © 2011-2022 走看看