public class Solution1 {
public static void main(String[] args) {
int[] a = {1, 7, 6, 7, 5, 4, 4, 3, 2, 0};
heapSort(a);
}
private static void heapSort(int[] arr){
//堆排序思路
//构建大顶堆或者小顶堆
//将堆顶移动到最后
//堆前面的重新构建大顶堆
int n = arr.length;
for(int i=n/2-1; i>=0; i--){
createHeap(arr, i, n);
}
for(int j=n-1; j>=0; j--){
swap(arr, 0, j);
createHeap(arr, 0, j);
}
System.out.println(arr.toString());
}
private static void swap(int[] arr, int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
private static void createHeap(int[] arr, int i, int n){
int tmp = arr[i];
for(int k=2*i+1; k<n; k=2*k+1){
if(k+1<n && arr[k]>arr[k+1]){
k++;
}
if(arr[k]<tmp){
arr[i] = arr[k];
i = k;
}else{
break;
}
}
arr[i] = tmp;
}
}
堆排序-java实现
最新推荐文章于 2023-11-17 17:42:25 发布