jialisoftw

          java 實現最小二叉堆排序

          寫在前面: 
          一覺醒來,我就突然有靈感了...... 
          最小二叉堆定義: 
          二叉堆是完全二元樹或者是近似完全二元樹,最小二叉堆是父結點的鍵值總是小于或等于任何一個子節點的鍵值的堆堆。 
          存儲: 
          二叉堆一般用數組來表示。 
          根節點在數組中的位置是0,第n個位置的子節點分別在2n+1和 2n+2; 
          位置k的葉子的父節點位置為(k-1)/2; 
          實現: 
          Java代碼:  
          1. /** 
          2.  * @description 元素添加到末尾,和它的父節點比,如果比它小就交換 
          3.  * @param array 
          4.  *  
          5.  * @author LynnWong 
          6.  */  
          7. private int[] getMinBinaryHeap(int[] array){  
          8.     int N = array.length;  
          9.     int minBinaryHeap[] = new int[N];  
          10.     int root;//根的值  
          11.     int heapSize = 0;//記錄插入位置  
          12.     for(int num : array){  
          13.         minBinaryHeap[heapSize]=num;  
          14.         ++heapSize;  
          15.         int pointer = heapSize-1;//當前指向的數組元素位置  
          16.         while(pointer!=0){  
          17.             int leafPointer = pointer;//葉子節點位置  
          18.             pointer = (pointer-1)/2;//根節點位置  
          19.             root = minBinaryHeap[pointer];//根節點  
          20.             if(num>=minBinaryHeap[pointer]){//永遠把當前數組元素看成葉子與其根比較或者換位  
          21.                 break;  
          22.             }//如果根比葉子大 就交換位置  
          23.             minBinaryHeap[pointer] = num;  
          24.             minBinaryHeap[leafPointer] = root;  
          25.               
          26.         }  
          27.     }  
          28.     return minBinaryHeap;  
          29.       
          30. }  
          Java代碼 : 
          1. /*** 
          2.  * 用隨機數測試二叉堆排序 
          3.  * 測試10遍,強迫癥似的變態... 
          4.  */  
          5. public void text(){  
          6.     for(int i=0;i<10;i++){  
          7.         Random rnd = new Random();   
          8.         int [] lala = {rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6)};  
          9.         System.out.print("輸入:");  
          10.         for(int a : lala){  
          11.             System.out.print(a+" ");  
          12.         }  
          13.         System.out.println();  
          14.         int []array = this.getMinBinaryHeap(lala);  
          15.         System.out.print("輸出:");  
          16.         for(int a : array){  
          17.             System.out.print(a+" ");  
          18.         }  
          19.         System.out.println();  
          20.     }  

          posted on 2013-01-10 14:01 飛豬一號 閱讀(1490) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2013年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新安县| 湖南省| 册亨县| 离岛区| 溧阳市| 昭通市| 新建县| 江安县| 弥勒县| 尖扎县| 宁城县| 沁阳市| 雅安市| 东辽县| 韶关市| 合山市| 邻水| 米易县| 广宁县| 昌邑市| 娱乐| 额敏县| 阿合奇县| 宁夏| 竹山县| 封丘县| 民丰县| 漯河市| 大同县| 郁南县| 晋城| 柳州市| 寻甸| 莲花县| 庆云县| 蓬溪县| 沾益县| 建水县| 县级市| 尉犁县| 扶风县|