算法三——左程云

本文详细介绍了堆数据结构,包括大根堆和小根堆的概念,以及heapInsert和heapify操作。堆排序的建立过程包括从上到下和从下到上的两种方法,并分析了其时间复杂度。此外,还探讨了几乎有序数组的排序策略。
摘要由CSDN通过智能技术生成

题目三

1,堆结构就是用数组实现的完全二叉树结构
2,完全二叉树中如果每棵子树的最大值都在顶部就是大根堆
3,完全二叉树中如果每棵子树的最小值都在顶部就是小根堆
4,堆结构的heaplnsert与heapify操作
5,堆结构的增大和减少
6,优先级队列结构,就是堆结构

完全二叉树:满二叉树树或者从左向右变满的二叉树
i的左孩子:i * 2 + 1
i的右孩子:i * 2 + 2
i的父亲:(i-1)/2
大根堆:每一颗子树的最大值就是根节点
小根堆:每一颗子树的最小值就是根节点

heaplnsert操作:节点向上移动的过程
heapify操作:节点向下移动的过程

heaplnsert
初始heapsize=0,用户依次给数字,组成一个大根堆。

//某个数现在处在index位置,往上继续移动
    public static void heapInsert(int[] arr, int index) {
   
        while (arr[index] > arr[(index - 1) / 2]) {
   
            swap(arr, index, (index - 1) / 2);
            index = (index - 1) / 2;
        }
    }

根的父亲:(0-1)/2=0

heapify 堆化
一个节点向下移动的过程
比如,移除最大值,并求第二大值。首先移除根,然后将最后一个节点放在根上,让下移,成为大根堆。

//某个数在index位置,能否往下移动
    public static void heapify(int[] arr, int index, int heapSize) {
   
        int left = index * 2 + 1; //左孩子的下标
        while (left < heapSize) {
   </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值