今天某易面试被严重打击,堆排序直接干懵了,下定决心好好学一下。
public class HeapSort {
public static void HeapSort(int[] A, int size) {
BuildHeap(A, size);
for(int i = size-1; i>=0; i--) {
int temp = A[0];
A[0] = A[i];
A[i] = temp;
HeapAdjust(A, 0, i);
}
}
public static void BuildHeap(int[] A, int size) {
for(int i=(size-1)/2; i>=0; i--) {
HeapAdjust(A, i, size);
}
}
public static void HeapAdjust(int[] A, int i, int size) {
int lchild = 2*i+1;
int rchild = 2*i+2;
int max = i;
if(i <= (size-1)/2) {
if(lchild < size && A[lchild] > A[max]) {
max = lchild;
}
if(rchild < size && A[rchild] > A[max]) {
max = rchild;
}
if(max != i) {
int temp = A[max];
A[max] = A[i];
A[i] = temp;
HeapAdjust(A, max, size);
}
}
}
}