码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序(大根堆)

时间:2017-11-04 13:18:49      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:堆排序   元素   ack   system   span   二叉树   ring   依次   algo   

package algorithm;

public class LargeHeapSort 
{
    /**
     * 对数组进行调整,使得arr[low]成为low-len最大的
     * @param arr
     * @param low 当前二叉树(堆的一部分)的根
     * @param len 数组的长度
     */
    public static void sift(int[] arr,int low,int len)
    {
        int i=low;
        int j=2*i+1;
        int temp=arr[low];
        while(j<len)
        {
            if(j<len-1&&arr[j]<arr[j+1])
                j++;
            if(temp<arr[j])
            {
                arr[i]=arr[j];
                i=j;
                j=2*i+1;
            }
            else
                j=len+1;
        }
        arr[i]=temp;
    }
    /**
     * 大根堆排序,先将arr数组调整成大根堆,然后依次输出堆中最大的元素
     * 调整成大根堆:从最后一个非叶结点为根调整数组,依次往前调整
     * 输出大根堆:将树根与最后一个结点交换后,输出最后一个结点,然后重新调整成大根堆
     * @param arr
     * @param len 数组长度
     */
    public static void sort(int[] arr,int len)
    {
        int temp;
        for(int i=len/2-1;i>=0;i--)//(len/2-1)是最后一个非叶子结点位置
        {
            sift(arr,i,len);
        }
        for(int i=len-1;i>0;i--)
        {
            temp=arr[0];
            arr[0]=arr[i];
            arr[i]=temp;
            System.out.print(temp+" ");
            sift(arr,0,i);
        }
        System.out.print(arr[0]);
    }
    public static void main(String[] args)
    {
        int[] arr= {999,555,5,8,1,55,74,75,78,10,78};
        sort(arr,arr.length);
    }
}
  

 

堆排序(大根堆)

标签:堆排序   元素   ack   system   span   二叉树   ring   依次   algo   

原文地址:http://www.cnblogs.com/jesssey/p/7782362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!