堆排序,代码简化至32行
原理如下gif图,该图为搜索图,非原创:
源代码:
import java.util.Arrays;
public class HeapSort {
public static void main(String args[]) {
int arr[]= {8,6,2,0,7,9,3,4,1,5,11};
System.out.println("source data: "+Arrays.toString(arr));
sort(arr,arr.length-1);
System.out.println("heap sort data: "+Arrays.toString(arr));
}
private static void sort(int arr[],int len) {
for(int i=(len-1)/2;i>=0;i--)
adjustHeap(arr,i,len);
for(int i=len;i>0;i--) {
swap(arr,0,i);
adjustHeap(arr,0,i-1);
}
}
private static void adjustHeap(int arr[],int i,int len) {
int max=i*2+1;
if(max>len) return ;
if(max+1<=len&&arr[max]<arr[max+1])
max++;
if(arr[max]>arr[i]) {
swap(arr,i,max);
adjustHeap(arr,max,len);
}
}
private static void swap(int arr[],int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
运行结果:
来源:CSDN
作者:Bitter_elf
链接:https://blog.csdn.net/weixin_43873198/article/details/103588762