大顶堆和小顶堆

堆排序还是选择排序
其实大顶堆就是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;



    }
}

这个代码用于生成大顶堆。

发布了92 篇原创文章 · 获赞 0 · 访问量 1980

猜你喜欢

转载自blog.csdn.net/Be_With_I/article/details/104432761