美文网首页
拙劣算法:堆建立

拙劣算法:堆建立

作者: 我在等你回复可你没回 | 来源:发表于2019-05-14 18:16 被阅读0次

说明

某一个节点i父节点,子节点公式:
父节点=(i -1)/2
左子节点=2i+1
右子节点=2
i+1

heapify用于就某一个i节点搞堆,用到递归,如果存在交换,被交换的点要递归搞堆。

buildHeap用来建立堆,怎么建立的呢,从最后一个节点往上执行heapify操作。想想为什么要这样做??因为从下往上,可以确保下面的先搞成堆,上面的就可以用下面的了。

        int[] arr = {4,10,3,5,1,2,100};
        int[] heap = buildHeap(arr,7);
        for (int i = 0; i < heap.length; i++) {
            Log.i("findnum"," " + heap[i]);
       }


    private int[] heapify(int [] tree, int size,int i) {
        int left = 2 * i + 1;
        int right = 2 * i + 2;
        if (right > size -1 || left > size -1) {
            return tree;
        }
        int max = i;
        if (tree[left] > tree[i]) {
            max = left;
        }
        if (tree[right] > tree[i]) {
            max = right;
        }
        if (max != i) {
            int temp = tree[i];
            tree[i] = tree[max];
            tree[max] = temp;
            return heapify(tree, size, max);
        }
        return tree;
    }

    private int[] buildHeap(int [] tree, int size) {
        int round = 1;
        for (int i = size -1; i >= 0 ; i--) {
            Log.i("findnum","rount :" + round + "try heap:" + tree[i]);
            tree = heapify(tree,size,i);
            for (int j = 0; j < tree.length; j++) {
                Log.i("findnum"," " + tree[j]);
            }
            round++;
        }
        return tree;
    }

参考:https://www.bilibili.com/video/av47196993/?redirectFrom=h5

相关文章

  • 拙劣算法:堆建立

    说明 某一个节点i父节点,子节点公式:父节点=(i -1)/2左子节点=2i+1右子节点=2i+1 heapify...

  • 堆算法

    示例代码 结果

  • 堆算法

  • 算法之堆算法

    堆的定义如下:n个元素的序列{k0,k1,...,ki,…,k(n-1)}当且仅当满足下关系时,称之为堆。" ki...

  • 算法导论第6.4章 - 堆排序算法

    伪代码利用了维护堆和建立堆的部分 堆排序 建立堆 维护堆的性质 在建立好的堆里面,根部的元素是最大的,然后把这个最...

  • 堆相关算法

    转发 C 堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成,它们均是通过调用Heapify实现的。...

  • 堆调整算法

    堆调整算法 思路 算法将获取到一组数据的最大值(针对大顶堆)或最小值(针对小顶堆)。 基本思想 通过堆排序的调整算...

  • 算法之我见(I)

    1.算法如何认知 初学算法是建立在数据结构的基础上的,然后基本就是利用一堆数据结构来解决给定的数据题。虽然当时学的...

  • 剑指offer 数据流中的中位数

    建立大顶堆和小顶堆

  • heapq : 堆队列算法

    heapq : 堆队列算法 Source code: Lib/heapq.py 介绍 这个模块提供了堆队列算法的实...

网友评论

      本文标题:拙劣算法:堆建立

      本文链接:https://www.haomeiwen.com/subject/ekpeaqtx.html