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;
    	}
    }
    

      

  • 相关阅读:
    ural 1110,快速幂
    ural 1109,NYOJ 239,匈牙利算法邻接表
    CodeBlocks养眼的colour theme
    UVa 10047,独轮车
    UVa 10054,欧拉回路
    UVa 11624,两次BFS
    hiho一下,第115周,FF,EK,DINIC
    Poj(1220),hash
    2013 Asia Regional Changchun I 题,HDU(4821),Hash
    UVa 213,World Finals 1991,信息解码
  • 原文地址:https://www.cnblogs.com/apanda009/p/7786489.html
Copyright © 2011-2022 走看看