北京小辉的博客

学习是一种享受,也是一种痛苦,更是一种回忆!!!

大顶堆积排序--Java版

目录

1、介绍

2、步骤解说

3、图解

4、代码展示

5、结果展示

————————————————————————————–

1、介绍

提前参考: Java实现大顶堆和小顶堆
http://blog.csdn.net/silentwolfyh/article/details/77099258

介绍:先将数组按照【大顶堆】排序,接着一个一个移除【顶节点】

2、步骤解说

1、看明白Java实现大顶堆和小顶堆
2、在“//堆积排序”过程中,将堆顶的最大值和最后节点交换
3、调用ad_heap方法,重新设置最大堆
4、尾部节点的坐标每次执行一次加一,所有最大值就在最后

3、图解

这里写图片描述

4、代码展示

package com.datastructure.solr;


/***
 * 需求:堆积排序法
 * 
 * 提前参考: Java实现大顶堆和小顶堆 
 * http://blog.csdn.net/silentwolfyh/article/details/77099258
 * 
 * 步骤:
 * 1、看明白Java实现大顶堆和小顶堆 
 * 2、在“//堆积排序”过程中,将堆顶的最大值和最后节点交换
 * 3、调用ad_heap方法,重新设置最大堆
 * 4、尾部节点的坐标每次执行一次加一,所有最大值就在最后
 */

import java.io.*;
public  class HeapSort
{
public static void main(String args[]) throws IOException
   {
    int i,size,data[]={0,70,10,50,30,40,20,60}; //原始数组内容
    size=data.length;
    System.out.print("原始数组:");
    for(i=1;i<size;i++)
        System.out.print("["+data[i]+"] ");
    HeapSort.heap(data,size);           //建立堆积树
    System.out.print("\n"+"\n排序结果:");
    for(i=1;i<size;i++)
        System.out.print("["+data[i]+"] ");

   }

public static void heap(int data[] ,int size)
{
    int i,j,tmp;
    for(i=(size/2);i>0;i--)             //建立堆积树节点   
        HeapSort.ad_heap(data,i,size-1);
    System.out.print("\n大顶堆内容:");
    for(i=1;i<size;i++)             //原始堆积树内容
        System.out.print("["+data[i]+"] ");
    System.out.print("\n");
    for(i=size-2;i>0;i--)               //堆积排序
    {  
        tmp=data[i+1];              //头尾节点交换
        data[i+1]=data[1];
        data[1]=tmp;
        HeapSort.ad_heap(data,1,i);             //处理剩余节点
        System.out.print("\n大顶堆过程:");
        for(j=1;j<size;j++)
            System.out.print("["+data[j]+"] ");
    }
}
public static void ad_heap(int data[],int i,int size){
    int j,tmp,post;
    j=2*i;
    tmp=data[i];
    post=0;
    while(j<=size && post==0)
    {  
        if(j<size)
        {           

            if(data[j]<data[j+1])   //找出两个子节点最大值
                j++;
        }

        if(tmp>=data[j])            //若树根较大,结束比较过程
            post=1;
        else
        {           
            data[j/2]=data[j];      //若树根较小,则继续比较,这里将最大子节点赋值给父节点
            j=2*j;
        }
   }
   data[j/2]=tmp;                   //指定树根为父节点
   }
}

5、结果展示

原始数组:[70] [10] [50] [30] [40] [20] [60]
大顶堆内容:[70] [40] [60] [30] [10] [20] [50]

大顶堆过程:[60] [40] [50] [30] [10] [20] [70]
大顶堆过程:[50] [40] [20] [30] [10] [60] [70]
大顶堆过程:[40] [30] [20] [10] [50] [60] [70]
大顶堆过程:[30] [10] [20] [40] [50] [60] [70]
大顶堆过程:[20] [10] [30] [40] [50] [60] [70]
大顶堆过程:[10] [20] [30] [40] [50] [60] [70]

排序结果:[10] [20] [30] [40] [50] [60] [70]

阅读更多
版权声明:本文为博主原创文章,出处为 http://blog.csdn.net/silentwolfyh https://blog.csdn.net/silentwolfyh/article/details/77100763
个人分类: 【数据结构】排序
所属专栏: 数据结构
上一篇大顶堆和小顶堆--Java版
下一篇希尔排序--Java版
想对作者说点什么? 我来说一句

常用排序java版 常用排序java

2011年06月13日 494KB 下载

没有更多推荐了,返回首页

关闭
关闭