免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1236 | 回复: 0
打印 上一主题 下一主题

JAVA排序算法实现代码-堆(Heap)排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-22 18:51 |只看该作者 |倒序浏览

/**
* JAVA排序算法实现代码-堆(Heap)排序。
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
public class Test {
  public static int[] Heap = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 预设数据数组
  public static void main(String args[]) {
    int i; // 循环计数变量
    int Index = Heap.length; // 数据索引变量
    System.out.print("排序前: ");
    for (i = 1; i  Index - 1; i++)
      System.out.printf("%3s", Heap);
    System.out.println("");
    HeapSort(Index - 2); // 堆排序
    System.out.print("排序后: ");
    for (i = 1; i  Index - 1; i++)
      System.out.printf("%3s", Heap);
    System.out.println("");
  }
  /**
   * 建立堆
   */
  public static void CreateHeap(int Root, int Index) {
    int i, j; // 循环计数变量
    int Temp; // 暂存变量
    int Finish; // 判断堆是否建立完成
    j = 2 * Root; // 子节点的Index
    Temp = Heap[Root]; // 暂存Heap的Root 值
    Finish = 0; // 预设堆建立尚未完成
    while (j = Index && Finish == 0) {
      if (j  Index) // 找最大的子节点
        if (Heap[j]  Heap[j + 1])
          j++;
      if (Temp >= Heap[j])
        Finish = 1; // 堆建立完成
      else {
        Heap[j / 2] = Heap[j]; // 父节点 = 目前节点
        j = 2 * j;
      }
    }
    Heap[j / 2] = Temp; // 父节点 = Root值
  }
  public static void HeapSort(int Index) {
    int i, j, Temp;
    // 将二叉树转成Heap
    for (i = (Index / 2); i >= 1; i--)
      CreateHeap(i, Index);
    // 开始进行堆排序
    for (i = Index - 1; i >= 1; i--) {
      Temp = Heap[i + 1]; // Heap的Root值和最后一个值交换
      Heap[i + 1] = Heap[1];
      Heap[1] = Temp;
      CreateHeap(1, i); // 对其余数值重建堆
      System.out.print("排序中: ");
      for (j = 1; j = Index; j++)
        System.out.printf("%3s",Heap[j]);
      System.out.println("");
    }
  }
}

运行结果
排序前: 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


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76697/showart_1659343.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP