堆排序(Heap Sort)
动图演示地址(https://www.cs.usfca.edu/~galles/visualization/HeapSort.html)
代码结构
源码
前置条件:父接口和测试类从上篇文章获取(https://blog.csdn.net/jt781861965/article/details/117051443)
package suanfa.paixu;
public class DuiTest implements Sort {
public static void main(String[] args) {
Test.test(new DuiTest());
}
public void heapify(int[] arr, int index, int heapSize) {
int left = (index << 1) + 1;
while (left < heapSize) {
int right = left + 1 < heapSize ? left + 1 : left;
int maxIndex = arr[left] >= arr[right] ? left : right;
if (arr[maxIndex] <= arr[index]) {
break;
}
swap(arr, index, maxIndex);
index = maxIndex;
left = (index << 1) + 1;
}
}
public void sort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int length = arr.length;
for (int i = length - 1; i >= 0; i--) {
heapify(arr, i, length);
}
swap(arr, 0, --length);
while (length > 0) {
heapify(arr, 0, length);
swap(arr, 0, --length);
}
}
}