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; } }
时间: 2024-11-03 21:39:04