时间复杂度o(nlogn)
给一个无序数组,使用堆排序实现数组有序
步骤 此处演示大顶堆
1.数组构建为大顶堆
2.数组arr[0] 和arr[arr.length - 1] 值交换,length–
3.继续进行堆调整
public void sort(int[] arr){
for(int i = arr.length/2-1;i >= 0; i--){
adjustHeap(arr,i,arr.length);
}
for(int i = arr.length-1;i > 0; i--){
swap(arr,0 , i);
adjustHeap(arr,0,i);
}
}
private void adjustHeap(int[] arr, int i, int length){
int temp = arr[i];
for(int j = i*2+1;j < length; j = j*2+1){
if(j + 1 < length && arr[j+1] > arr[j]){
j++;
}
if(arr[j] > temp){
swap(arr, i, j);
i = j;
}else{
break;
}
}
arr[i] = temp;
}
private void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}