堆排序还是选择排序
其实大顶堆就是arr[n]>=arr[2n+1] && arr[n]>=arr[2n+2] 这个就是利用数组存储树的条件。
小顶堆是把 > 换车<即可。
堆是具有以下特点的完全二叉树
不是满足上边的第一个条件,就是满足第二个条件。
package a;
public class HeapSortDemo {
public static void main(String[] args) {
int[] arr = {4, 6, 5, 8, 9};
heapSort(arr);
}
private static void heapSort(int[] arr) {
}
private static void swap(int[] arr, int index,int len) {
int temp = arr[index];
for(int k = index*2+1;k<len;k = k*2+1) {//已经是移动后的子节点了
if ((k+1)<len&&arr[k] < arr[k + 1]) {
k++;//也就是找到那个最大值。
}
if (arr[k] > temp) {//总是跟最初的那个值比较。也就是子节点的值
arr[index]=arr[k];//将大的值移动到父节点
index=k;//占领移动后的位置。
}else {
break;
}
}
arr[index] = temp;
}
}
这个代码用于生成大顶堆。