package cn.java.array;
import java.util.Arrays;
public class HeapSort {
public static void sort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
BuildMaxHeap(array);
int i = array.length - 1;
while (i > 0) {
swap(array,0,i);
Heapify(array, 0, --i);
}
}
// 构建最大堆
public static void BuildMaxHeap(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int lastIndex = (array.length - 1);
//从最后一个根节点开始调整
for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
Heapify(array, i, lastIndex);
}
}
//lastIndex指向数组最后一个元素
public static void Heapify(int[] array, int index, int lastIndex) {
int left = 2 * index + 1;
int right = 2 * index + 2;
int largest = index;
if (left <= lastIndex && array[left] > array[largest]) {
largest = left;
}
if (right <= lastIndex && array[right] > array[largest]) {
largest = right;
}
if (largest != index){
swap(array,largest,index);
Heapify(array, largest, lastIndex);
}
}
private static void swap(int[] array, int largest, int index) {
// TODO Auto-generated method stub
int temp=array[largest];
array[largest]=array[index];
array[index]=temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] num = new int[] { 53, 17, 78, 9, 45, 65, 87, 32 };
int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3 };
sort(array);
System.out.println(Arrays.toString(array));
}
}
Java实现堆排序
最新推荐文章于 2022-08-02 15:32:21 发布