思路:先将传进来的数组构造成大根堆。
1.将大根堆的最后一个值和根结点进行交换(因为根结点是最大的一个值)
2.将根结点的索引在heapSize上去除
3.对新的根结点做heapify
4.循环1,2,3,步骤的操作 直至heapSize为0 数组即有序
public void heapSort(int[] arr) {
//判断数组是否需要进行排序
if (arr == null || arr.length < 2) {
return;
}
//数组有序,将参数传进来的数组构造成大根堆
for (int i = 0; i < arr.length; i++) {
//调用方法进行大根堆的构造
//边取值边构造
createHeap(arr, i);
}
//大根堆构造完毕
//获得有效元素的长度
int heapSize = arr.length;
//将大根堆的最后一个值和根结点进行交换
swap(arr,--heapSize,0);
//下面两部操作是一个循环的过程,循环直至堆上的索引记录为0 即heapSize=0
while(heapSize > 0) {
//对新的根结点做heapify
heapify(arr, 0, heapSize);
//heapify之后,最大的值又来到根结点,继续交换最后一个值和根结点
swap(arr, --heapSize, 0);
}
}
//调用方法构