import java.util.Random;
/**
*
*/
public class HeapSort {
private int[] array;
private int length;
public HeapSort(int[] array) {
this.array = array;
this.length = array.length;
}
public void maxHeapSort() {
buildMaxHeapTree();
// displayTree();
for (int i = 0; i < array.length; i++) {
int tmp = array[length - 1];
array[length - 1] = array[0];
array[0] = tmp;
length--;
// System.out.println("length :" + length);
maxify(0);
// displayArray();
}
}
public void displayArray() {
for (int i : array) {
System.out.print(i + " , ");
}
System.out.println();
}
public void displayTree() {
for (int i = 1; i <= array.length; i *= 2) {
for (int j = i - 1; j < i * 2 - 1 && j < array.length; j++) {
System.out.print(array[j] + " , ");
}
System.out.println();
}
}
public void buildMaxHeapTree() {
int flag = length / 2;
for (int i = flag; i >= 0; i--) {
maxify(i);
}
}
public void maxify(int i) {
int lchild = 2 * i + 1;
int rchild = 2 * i + 2;
int max = i;
if (lchild < length && array[max] < array[lchild]) {
max = lchild;
}
if (rchild < length && array[max] < array[rchild]) {
max = rchild;
}
if (max != i) {
int tmp = array[i];
array[i] = array[max];
array[max] = tmp;
maxify(max);
} else {
return;
}
}
public static void main(String[] args) {
Random random = new Random();
for (int i = 0; i < 10; i++) {
int[] array = new int[20];
for (int j = 0; j < 20; j++) {
array[j] = random.nextInt(30);
}
HeapSort heapSort = new HeapSort(array);
// heapSort.displayArray();
heapSort.maxHeapSort();
heapSort.displayArray();
// heapSort.displayTree();
}
}
}
堆排序JAVA版实现
最新推荐文章于 2022-08-02 15:32:21 发布