堆排序(数组存储)
1.堆是一个完全二叉树。
完全二叉树的定义是除了最后一层没放满,以及最后一层的叶子都是偏左放置。
2.每个节点大于或等于它的任意一个孩子。
关于排序问题,我们首先要知道:
1.双亲节点位置为(i - 1)/ 2
2.孩子节点位置为 左孩子: ( 2 * i ) + 1
右孩子 : ( 2 * i ) + 2
下面就是具体的实现
我们了解到堆排序是在数组中的实现,每次排序宏观上是将最大的放到数组最后
看上去和选择排序一样,但是实现的方法不一样,堆排序的算法效率到达了O(nlog(n))
每次删除最后一个元素,也就是最大的元素,返回此元素
我们就按照二叉树来说,每次我们取到树的root,作为二叉树,
那么root上肯定放的是最大元素,将root取出
root位置上的元素放的是它孩子结点中最大的那个元素
循环判断,
使我去掉了root后,仍然是一个完全二叉树
最后,root到最后一个,返回root元素,并删除。
桶排序
算法效率为O(dn)
d为位数的最大值