算法<六>堆排序

2019-07-05  本文已影响0人  小吖么小一郎
package com.example.demo.SortAlgorithm;
/*
 * @Author: i_heh
 * @Date: 2019/7/5
 * @Time: 14:11
 * @Description: 堆排序
 */
public class HeapSort {
    public static void main(String[] args) {
        int[] a=new int[]{0,9,8,3,5,2,7};
        Sort(a,a.length-1);
        for(int i:a){
            System.out.println(i);
        }
    }
    public static void MaxHeapify(int[] a,int index,int size){
        int l=2*index;
        int r=2*index+1;
        int largest=index;
        if(l<=size && a[l]>a[index]){
            largest=l;
        }
        if(r<=size && a[r]>a[largest]){
            largest=r;
        }
        if(largest!=index){
            int temp=a[largest];
            a[largest]=a[index];
            a[index]=temp;
            MaxHeapify(a,largest,size);
        }
    }
    public static void HeapBuild(int[] a,int size){
        for(int i=size/2;i>=1;i--){
            MaxHeapify(a,i,size);
        }
    }
    public static void Sort(int[] a,int size){
        HeapBuild(a,size);
        for(int i=size;i>=2;i--){
            int temp=a[i];
            a[i]=a[1];
            a[1]=temp;
            MaxHeapify(a,1,i-1);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读