作者: dreamcatcher-cx
出处: http://www.cnblogs.com/chengxiao/
记录一下实现算法:
static void heapSort(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--) {
swap(arr,0,j);
adjustHeap(arr, 0, j);
}
}
static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void adjustHeap(int[] arr, int i, int length) {
int temp = arr[i];
for(int k = 2*i + 1;k < length;k=k*2+1) {
if(k+1 < length && arr[k+1] > arr[k]) {
k++;
}
if (arr[k] > arr[i]) {
arr[i] = arr[k];
i = k;
}else {
break;
}
}
arr[i] = temp;
}