堆排序的JAVA实现

10 篇文章 1 订阅
5 篇文章 0 订阅
package algorithm;

/**
 * @author Administrator
 *堆排序算法
 *思路:把数组看成一个二叉树,其中任意子节点的数总比他的孩子小,这种叫做小顶堆
 *    父亲节点比孩子节点的大的叫做大顶堆
 *    首先每次初始化顶堆,使得第一个数是最小的一个,然后把最小的和最后一个对调,
 *    重新对数组进行小顶堆化。当执行只剩一个数,该数组有序
 */
public class HeapSort {

	public void heapFixup(int<span style="font-family: Arial, Helvetica, sans-serif;"> array[],int begin,int end)//自头节点开始上而下调整</span>
	{
		int temp=array[begin];//头结点存放备份
		int parent=begin;
		int lchild=2*parent+1;  //左孩子
		while(lchild<=end)
		{
			if(lchild+1<=end&&array[lchild]>array[lchild+1])//寻找左右孩子中最小的一个
				lchild++;
			if(temp<array[lchild])//备份节点小于孩子节点的最小的那一个时,跳出循环
				break;
			array[parent]=array[lchild];//子节点上升
			parent=lchild;//查看下一个子节点的情况
			lchild=parent*2+1;	
		}

		array[parent]=temp;	//将备份的头结点放到对应的位置上去
	}
	public void heapSort()
	{
		HeapSort a= new HeapSort();
		int array[] = {9,8,7,6,5,4,3,2,1};
		int temp;
		for(int i =array.length/2-1;i>=0;i--)//初始化堆,
			a.heapFixup(array,i,array.length-1);
		


		for(int n=array.length-1;n>=1;n--)//排序,每次将数组第一个和最后一个对换,重新调成小顶堆
			{
			temp=array[n];
			array[n]=array[0];
			array[0]=temp;//删除小顶堆的根,然后把最后一个元素放上去。
			for(int i:array)
			System.out.print(i+" ");
			System.out.println();
			a.heapFixup(array,0,n-1);//重新调整堆
			}		

	}
	public static void main(String[] args) {
		HeapSort a=new HeapSort();

		a.heapSort();
	}

}
<img src="https://img-blog.csdn.net/20140723204909546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTkxODI2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" alt="" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值