小顶堆排序
public class 小顶堆输出 {
public static void main(String[] args) {
int arr[]={78,56,34,43,4,1,15,2,23};
sort(arr);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
private static void MinHeap(int[] arr) {
int n=arr.length;
for(int i=n/2-1;i>=0;i--) {
FixDown(arr,i,n);
}
}
private static void FixDown(int[] arr, int i, int n) {
int left=2*i+1;
int right=2*i+2;
if(left>=n) {
return;
}
int min=left;
if(right>=n) {
min=left;
}else {
if(arr[right]<arr[left]) {
min=right;
}
}
if(arr[i]<=arr[min]) {
return;
}
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
FixDown(arr,min,n);
}
private static void sort(int arr[]) {
MinHeap(arr);
for(int x=arr.length-1;x>=0;x--) {
swap(arr, 0, x);
FixDown(arr,0,x);
}
}
public static int[] swap(int arr[],int sp,int bigger) {
int temp=arr[sp];
arr[sp]=arr[bigger];
arr[bigger]=temp;
return arr;
}
}