java 堆排序

来源:互联网 发布:软件侵权起诉状范本 编辑:程序博客网 时间:2024/05/29 17:42


public class HeapSortClass {

 
 final static int HEAP_SIZE = 13; //堆積樹大小
 

 
 /*父結點*/
 public static int parent(int i)
 {
     return (int)Math.floor(i / 2);
 }
 
 /*左子結點*/
 public static int left(int i)
 {
     return 2 * i;
 }
 
 /*右子結點*/
 public static int right(int i)
 {
     return (2 * i + 1);
 }
 
 /*單一子結點最大堆積樹調整*/
 public static void Max_Heapify(int A[], int i, int heap_size)
 {
     int l = left(i);
     int r = right(i);
     int largest;
     int temp;
     if(l < heap_size && A[l] > A[i])
     {
         largest = l;
     }
     else
     {
         largest = i;
     }
     if(r < heap_size && A[r] > A[largest])
     {
         largest = r;
     }
     if(largest != i)
     {
         temp = A[i];
         A[i] = A[largest];
         A[largest] = temp;
         Max_Heapify(A, largest, heap_size);
     }
 }
 
 /*建立最大堆積樹*/
 public static void Build_Max_Heap(int A[])
 {
     for(int i = (HEAP_SIZE-1)/2; i >= 0; i--)
     {
         Max_Heapify(A, i, HEAP_SIZE);
     }
 }
 
 /*印出樹狀結構*/
 public static void print(int A[])
 {
     for(int i = 0; i < HEAP_SIZE;i++)
     {

               System.out.print(A[i]+" ");
     }
     System.out.println();
 }
 
 /*堆積排序程序碼*/
 public static void HeapSort(int A[], int heap_size)
 {
     Build_Max_Heap(A);
     int temp;
     for(int i = heap_size - 1; i > 0; i--)
     {
         temp = A[0];
         A[0] = A[i];
         A[i] = temp;
         Max_Heapify(A, 0, i);
     }
     print(A);
 }
 
 /*輸入資料並做堆積排序*/
 public static void main(String args[])
 {
     int A[] = new int[]{19, 1, 10, 14, 16, 4, 7, 9, 3, 2, 8, 5, 11};
     HeapSort(A, HEAP_SIZE);
 }
 
}