JAVA排序算法实现代码-堆(Heap)排序

来源:互联网 发布:gdb调试java 编辑:程序博客网 时间:2024/04/29 11:12

JAVA排序算法实现代码-堆(Heap)排序

  1. /** 
  2.  * JAVA排序算法实现代码-堆(Heap)排序。 
  3.  *  
  4.  * @author 老紫竹 JAVA世纪网(java2000.net) 
  5.  *  
  6.  */  
  7. public class Test {  
  8.   public static int[] Heap = { 1032195712043 }; // 预设数据数组  
  9.   
  10.   public static void main(String args[]) {  
  11.     int i; // 循环计数变量  
  12.     int Index = Heap.length; // 数据索引变量  
  13.   
  14.     System.out.print("排序前: ");  
  15.     for (i = 1; i < Index - 1; i++)  
  16.       System.out.printf("%3s", Heap[i]);  
  17.     System.out.println("");  
  18.   
  19.     HeapSort(Index - 2); // 堆排序  
  20.   
  21.     System.out.print("排序后: ");  
  22.     for (i = 1; i < Index - 1; i++)  
  23.       System.out.printf("%3s", Heap[i]);  
  24.     System.out.println("");  
  25.   }  
  26.   
  27.   /** 
  28.    * 建立堆 
  29.    */  
  30.   public static void CreateHeap(int Root, int Index) {  
  31.     int i, j; // 循环计数变量  
  32.     int Temp; // 暂存变量  
  33.     int Finish; // 判断堆是否建立完成  
  34.   
  35.     j = 2 * Root; // 子节点的Index  
  36.     Temp = Heap[Root]; // 暂存Heap的Root 值  
  37.     Finish = 0// 预设堆建立尚未完成  
  38.   
  39.     while (j <= Index && Finish == 0) {  
  40.       if (j < Index) // 找最大的子节点  
  41.         if (Heap[j] < Heap[j + 1])  
  42.           j++;  
  43.       if (Temp >= Heap[j])  
  44.         Finish = 1// 堆建立完成  
  45.       else {  
  46.         Heap[j / 2] = Heap[j]; // 父节点 = 目前节点  
  47.         j = 2 * j;  
  48.       }  
  49.     }  
  50.     Heap[j / 2] = Temp; // 父节点 = Root值  
  51.   }  
  52.   
  53.   public static void HeapSort(int Index) {  
  54.     int i, j, Temp;  
  55.     // 将二叉树转成Heap  
  56.     for (i = (Index / 2); i >= 1; i--)  
  57.       CreateHeap(i, Index);  
  58.   
  59.     // 开始进行堆排序  
  60.     for (i = Index - 1; i >= 1; i--) {  
  61.       Temp = Heap[i + 1]; // Heap的Root值和最后一个值交换  
  62.       Heap[i + 1] = Heap[1];  
  63.       Heap[1] = Temp;  
  64.       CreateHeap(1, i); // 对其余数值重建堆  
  65.   
  66.       System.out.print("排序中: ");  
  67.       for (j = 1; j <= Index; j++)  
  68.         System.out.printf("%3s",Heap[j]);  
  69.       System.out.println("");  
  70.     }  
  71.   }  
  72. }  


运行结果
排序前: 32 1 9 5 7 12 0 4
排序中: 12 7 9 5 1 4 0 32
排序中: 9 7 4 5 1 0 12 32
排序中: 7 5 4 0 1 9 12 32
排序中: 5 1 4 0 7 9 12 32
排序中: 4 1 0 5 7 9 12 32
排序中: 1 0 4 5 7 9 12 32
排序中: 0 1 4 5 7 9 12 32
排序后: 0 1 4 5 7 9 12 32