package temp;
class Test {
public static void main(String[] args) {
int A[] = { 19, 1, 10, 14, 16, 4, 7, 9, 3, 2, 8, 5, 11 };
HeapSort(A, A.length);
}
/* 父結點 */
static int parent(int i) {
return (int) (i / 2);
}
/* 左子結點 */
static int left(int i) {
return 2 * i;
}
/* 右子結點 */
static int right(int i) {
return (2 * i + 1);
}
/* 跟踪某一节点,使他满足最大堆 */
static void Max_Heapify(int A[], int i, int heap_size) {
int l;
int r;
l = left(i) ;
r = right(i);
int largest;
int temp;
if (l < heap_size && A[l] > A[i]) {
largest = l;
} else {
largest = i;
}
if (r < heap_size && A[r] > A[largest]) {
largest = r;
}
if (largest != i) {
temp = A[i];
A[i] = A[largest];
A[largest] = temp;
Max_Heapify(A, largest, heap_size);
}
}
/* 建立最大堆积树 */
static void Build_Max_Heap(int A[]) {
for (int i = A.length / 2; i >= 0; i--) {
Max_Heapify(A, i, A.length);
}
}
/* 对堆积树排序 */
static void HeapSort(int A[], int heap_size) {
Build_Max_Heap(A);
int temp;
for (int i = heap_size - 1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
Max_Heapify(A, 0, i);
}
for (int i = 0; i < A.length; i++) {
System.out.print(A[i] + " ");
}
System.out.println();
}
}
算法导论学习笔记--2--堆排序
最新推荐文章于 2021-05-24 20:06:10 发布