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

          統計

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广灵县| 宜宾市| 定安县| 门头沟区| 海城市| 西城区| 建宁县| 徐水县| 余江县| 资阳市| 建昌县| 景德镇市| 陕西省| 巴里| 休宁县| 万宁市| 德昌县| 梓潼县| 乌恰县| 巴里| 疏勒县| 三穗县| 临沭县| 大洼县| 延边| 司法| 普格县| 沈阳市| 基隆市| 衡山县| 金山区| 阿克| 郁南县| 抚宁县| 县级市| 石楼县| 莒南县| 万盛区| 独山县| 昭通市| 阿鲁科尔沁旗|