HeapSort

public class HeapSort {

        /**
         * @param args
         */
        public static void main(String[] args) {
                int [] test = {1,2,3,4,5,6,7,8,9};
                heapSort(test);
                /*for(int i =0;i<test.length;i++){
                        System.out.println(test[i]);
                }*/
//              queue = test;
//              init(test);
//              fixUp(8);
        /*      for(int i =0;i<test.length;i++){
                        System.out.println(test[i]);
                }
                System.out.println("********************");*/
        /*      for(int i =0;i<queue.length;i++){
                        System.out.println(queue[i]);
                }*/

        }
        
        private static int size = 0;
        private static  int[] queue;
        
        public static  void init(int[] data){
                queue = new int[data.length+1];;

                for(int i=0;i<data.length;i++){// father is bigger than child  and left child is bigger than right child 

                        queue[++size]= data[i];
                        fixUp(size);

                }
                for(int i =0;i<queue.length;i++){
                        System.out.println(queue[i]);
                }
        }
        
        
        public static  void remove(){
        swapData(queue, 1, size--);
        fixDown(1);
        }
        
        public  static void fixDown(int k){// 
                int j =0;
                while((j=k<<1)<=size){
                        
                        if(j<size && queue[j]<queue[j+1])
                                j++;
                        if(queue[k]>queue[j])
                                break;
                        swapData(queue, k, j);// swap with the biggest element
                        j = k;
                        
                }
        }
        
        public static void fixUp(int k){//queue[k] keep  up, if it  is less that queue[j],then stop  up
                while(k>1){
                        int j = k>>1;
                
                if(queue[j]>queue[k])
                        break;
                
                swapData(queue, k, j);
                k=j;
                        
                
                }
        }

        
        public  static  void swapData(int []data, int i, int j){
                int temp = data[i];
                data[i] = data[j];
                data[j]= temp;
        }
        
        public  static void heapSort(int[] data){
                init(data);
                for(int i =0; i<data.length;i++){
                remove();
                
                }
                System.arraycopy(queue,1, data, 0, data.length);
                 for(int i =0;i<data.length;i++){
                         System.out.println("AfterSort--data--->"+data[i]);
                 }
                
        }
        
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值