本文主要是介绍Java堆排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
package daweiguo.other;
/**
* @Author DaWeiGuo
* @Date 2022/3/19 21:04
* @Desc:
*/
public class HeapSort {
public static void main(String[] args) {
HeapSort heapSort = new HeapSort();
int[] arr = new int[]{4,10,3,5,1,2};
heapSort.heapSort(arr,arr.length);
for(int a:arr){
System.out.println(a);
}
}
public void heapSort(int[] arr,int len){
buildHeap(arr,len);
for(int i=len-1;i>=0;i--){
swap(0,i,arr);
adjustHeap(arr,0,i);
}
}
private void adjustHeap(int[] arr,int i,int len){
if(i>=len) return;
int c1 = 2 * i + 1;
int c2 = 2 * i + 2;
int max = i;
if(c1<len && arr[c1]>arr[max]){
max = c1;
}
if(c2<len && arr[c2]>arr[max]){
max = c2;
}
if(max!=i){
swap(max,i,arr);
adjustHeap(arr,max,len);
}
}
private void buildHeap(int[] arr,int len){
int lastNode = len - 1;
int parentNode = (lastNode - 1)/2;
for(int i=parentNode;i>=0;i--){
adjustHeap(arr,i,len);
}
}
private void swap(int x,int y,int[] arr){
int t = arr[x];
arr[x] = arr[y];
arr[y] = t;
}
}
这篇关于Java堆排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!