标签:
package sort;
import java.util.Scanner;
public class HeapSort {
public static int arr[];
static{
System.out.println("Please enter the array to sort, and use ‘,‘ as a separator:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String n[]=s.split(",");
arr=new int[n.length];
System.out.println("Before sort:");
for(int i=0;i<arr.length;i++){
arr[i]=Integer.parseInt(n[i]);
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String args[]){
int m=arr.length-1;
heapSort(m);
System.out.println("After sort:");
for(int i=0;i<=m;i++)
System.out.print(arr[i]+" ");
System.out.println();
}
public static void heapSort(int m){
int temp=0;
for(int i=(m+1)/2;i>=1;i--)
createHeap(m+1,i); //创建整个初始大根堆
for(int i=m;i>=1;i--){ //控制范围,逐渐缩小
createHeap(i+1,1); //创建根堆
temp=arr[0];
arr[0]=arr[i];
arr[i]=temp;
System.out.print("Current sorting:");
for(int k=0;k<=m;k++)
System.out.print(arr[k]+" ");
System.out.println();
}
}
//下面的方法是创建大根堆,每运行一次,都能找到堆的根部的数据
public static void createHeap(int m,int i){ //创建根堆
int j=2*i;
int temp=arr[i-1];
while(j<=m){
if(j<m && arr[j-1]<arr[j]) //找一个最大的数
j++;
if(temp<=arr[j-1]){ //判断第一个数是否比最大的数小
arr[i-1]=arr[j-1];
i=j;
j=2*i;
}
else break;
}
arr[i-1]=temp;
}
}
标签:
原文地址:http://www.cnblogs.com/lvbubu/p/4684287.html