您的位置:首页 > 其它

堆排序

2015-07-28 20:45 375 查看
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: