堆排序
大根堆:所有父节点的值大于等于子节点的值 小根堆:所有父节点的值小于邓等于子节点的值 堆排序基本思想: 1.将待排序列构造成一个大根堆 2.此时整个序列的最大值就是堆顶的跟结点 3.将其与末尾元素进行交换,此时末尾就是最大值 4然后 将剩余n-1个元素重新构造一个值,反复循环即可。
public class Day09022 {
public static void main(String[] args) {
Day09022 day09022 = new Day09022();
int [] arr={4,6,8,5,9,-1,96,99};
ad(arr);
System.out.println(Arrays.toString(arr));
}
public static void ad(int [] arr){
for(int i=arr.length/2-1;i>=0;i--){
adjustHeap(arr,i,arr.length);
}
for(int j=arr.length-1;j>0;j--){
int temp =arr[j];
arr[j]=arr[0];
arr[0]=temp;
adjustHeap(arr,0,j);
}
}
public static void adjustHeap(int arr[], int i, int length) {
int temp = arr[i];
for (int k = i * 2 + 1; k < length; k = k * 2 + 1) {
if (k + 1 < length && arr[k] < arr[k + 1]) {
k++;
}
if(arr[k]>temp){
arr[i]=arr[k];
i=k;
}else{
break;
}
}
arr[i]=temp;
}
}
|