堆排序

public class HeapSort
{
  static void adjust_heap(int[] heap, int root, int len)
  {
    boolean done; /*   是否可结束的变量  */
    int j;
    int temp;
    j = 2 * root; /*   子结点指针 */
    temp = heap[root]; /*   堆的根值  */
    done = false; /*   建立变量    */
    while (j <= len && !done) { /*   主循环  */
      if (j < len) /*   找最大的子结点   */ {
        if (heap[j] < heap[j + 1]) {
          j++; /*   下一结点      */
        }
      }
      if (temp >= heap[j]) /*   比较树根值    */ {
        done = true; /*   结束  */
      }
      else {
        heap[j / 2] = heap[j]; /*   父结点是目前结点     */
        j = 2 * j; /*   其子结点       */
      }
    }
    heap[j / 2] = temp; /*   父结点为根值    */
  }

  static void heap(int[] heap, int len)
  {
    int i, j, temp;

    for (i = (len / 2); i >= 1; i--) /*将二叉树转成堆*/ {
      adjust_heap(heap, i, len);
    }
    System.out.print("/n堆中数据: "); /*   换行  */
    for (j = 1; j < 10; j++) /*输出堆的内容  */ {
      System.out.print(heap[j]);
    }
    System.out.print("/n"); /*   换行    */
    for (i = len - 1; i >= 1; i--) { /*   堆排序主循环    */
      temp = heap[i + 1]; /*   交换最后元素   */
      heap[i + 1] = heap[1];
      heap[1] = temp;
      adjust_heap(heap, 1, i); /*   重建堆    */
      System.out.print("/n处理内容:   ");
      for (j = 1; j < 10; j++) /*   输出处理内容  */ {
        System.out.print(heap[j]);
      }
    }
  }

  public static void main(String[] args)
  {
    /*   二叉树结点数据   */
    int data[] = new int[] {
        0, 5, 6, 4, 8, 2, 3, 7, 1, 9};
    int i;

    System.out.print("二叉树的内容:   ");
    for (i = 1; i < 10; i++) /*   输出二叉树内容   */ {
      System.out.print(data[i]);
    }
    heap(data, 9); /*   堆排序法   */
    System.out.print("/n/n输出排序结果:   ");
    for (i = 1; i < 10; i++) /*   输出最后内容    */ {
      System.out.print(data[i]);
    }
    System.out.print("/n");
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值