2017年7月29日 星期六

(Java)(資料結構)HeapTree

  1. /* 
  2.  *  
  3.  * 堆積樹 
  4.  *  
  5.  */  
  6. public class Heap_Tree {  
  7. public   void PrintHeapTree(){  
  8.     for(int i : HeapTree)  
  9.         if(i!=0)  
  10.     System.out.print(i+" ");  
  11.         System.out.println();  
  12. }  
  13.       
  14.       
  15. public static void main(String args[]){  
  16.     int[] tree = {0,51,23,45,15,32,47,96};//11 10 1-10  
  17.     Heap_Tree b =new Heap_Tree(tree);  
  18.     b.Sort();  
  19.     System.out.println("原始內容 :");  
  20.     b.PrintHeapTree();  
  21.     b.Print();  
  22. }  
  23. int[] HeapTree ;  
  24. int End ;  
  25. void Print(){  
  26.     int value ;  
  27.     for(int node = HeapTree.length-1  ; node > 0; node--){  
  28.             value = HeapTree[1] ;  
  29.             HeapTree[1]  = HeapTree[node] ;  
  30.             HeapTree[node] = value;  
  31.             End = node;  
  32.             Sort();  
  33.             System.out.print("排序"+node+" : ");  
  34.             PrintHeapTree();  
  35.     }  
  36.       
  37. }  
  38. void Sort(){//採用最大堆疊樹  
  39.     int parent ;  
  40.     for(int node = 1 ; node < HeapTree.length ; node++){//走訪1-- n-1 Node  
  41.         if( End ==  node) break ;//END為後面已經排序好  
  42.         if(node == 1 ) continue;  
  43.            do{  
  44.             parent=node/2;  
  45.             if(HeapTree[node] < HeapTree[parent])//父節點>子 跳出換下一個  
  46.              break;  
  47.             int tmp = HeapTree[node];  
  48.             HeapTree[node] = HeapTree[parent] ;  
  49.             HeapTree[parent] = tmp ;   
  50.             node = parent ;   //將指標轉到parent  
  51.         }while(node != 1);//node等於1代表根節點  
  52.     }  
  53.     }  
  54.                   
  55.   
  56. Heap_Tree(int[] data){  
  57.     HeapTree = data ;  
  58. }  
  59. }  

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。