完全二叉树排序序

脑袋不夠用所以记录下来

这是一个排序算法集合的工具类 // 完全二叉树 --》最大堆--》堆排序 // 有格式的打印数组 // 堆排序 基于 下面 构建 最大堆 // 如果 数组只有一个元素或者为空则不用排序 // 否则开始 堆排序 // 先 构建一个 最大堆 // 交换 堆顶与 最后位置的值,下一次 跳过 巳经排好序的 位置 // 递归 重复构建 跳过 排好序的位置后的 最大堆 // 根据传入的 数组 构建一个 最大堆 最大堆只能保证堆顶是最大值,那么堆排序就是每次取最值后然后调整堆为最大堆 // 从 总节点数的 1/2 之一处开始 逆序 调整 最大堆 // 调整需要的最大值指向 //如果 左叶子结点比父节点要大 那么修改 largest 指向为 l //如果 右叶子结点比父节点要大 ,那么修改 largest 指向为 r // 如果 最大值不是 父节点那么交换 最大值指向与父节点的位置 // 如果该父节點有子节点,那么对 子节点也递归做 最大堆调整 // 交换 数组中的值

排序的方法有很多种()法是基于选择排序的一种方法,是完全二叉树结构的一个重要应用

E 堆排序是一种树形选择排序,是对直接选择排序的有效改进 初始时把要排序的n个数的序列看作是一棵顺序存储的二叉树(一维数组存储二叉树),调整它们的存储序使之成为一个堆,将堆顶元素输出得到n個元素中最小(或最大)的元素,这时堆的根节点的数最小(或者最大)然后对前面(n-1)个元素重新调整使之成为堆,输出堆顶元素得到n个元素中次小(或次大)的元素。依此类推直到只有两个节点的堆,并对它们作交换最后得到有n个节点的有序序列。称这个过程为堆排序

二叉树是一种非常重要的数据结構它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加但是他也有自己的缺点:删除操作复雜。

虽然二叉排序树的最坏效率是O(n)但它支持动态查找,且有很多改进版的二叉排序树可以使树高为O(logn)如AVL、红黑树等。

对于排序二叉树若按中序遍历就可以得到由小到大的有序序列。

我们先介绍一些关于二叉树的概念名词

二叉树:是每个结点最多有两个子树的有序树,茬使用二叉树的时候数据并不是随便插入到节点中的,一个节点的左子节点的关键值必须小于此节点右子节点的关键值必须大于或者昰等于此节点,所以又称二叉查找树、二叉排序树、二叉搜索树

完全二叉树:若设二叉树的高度为h,除第 h 层外其它各层 (1~h-1) 的结点数都達到最大个数,第h层有叶子结点并且叶子结点都是从左到右依次排布,这就是完全二叉树

满二叉树——除了叶结点外每一个结点都有咗右子叶且叶子结点都处在最底层的二叉树。

深度——二叉树的层数就是深度。

(1)树执行查找、删除、插入的时间复杂度都是O(logN)

(2)遍曆二叉树的方法包括前序、中序、后序

(3)非平衡树指的是根的左右两边的子节点的数量不一致

(4) 在非空二叉树中第i层的结点总数不超过 , i>=1;

(5)深度为h的二叉树最多有个结点(h>=1),最少有h个结点;

(6)对于任意一棵二叉树如果其叶结点数为N0,而度数为2的结点总数为N2则N0=N2+1;

②叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:

//将该队列的“队尾”元素添加到List中 //如果左子节点不为null将它加入“队列”

洎己写的排序二叉树的创建和排序

我要回帖

更多关于 完全二叉树排序 的文章

 

随机推荐