目录
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]