一. 二叉树排序
对比前面所述的一些排序算法,之前通常使用数组或者链表之类的初级数据结构,二叉树排序使用的是高级数据结构——树。实际上是使用二叉搜索树的机制,对二叉搜索树中序遍历即可以得到排序数组。代码可以直接参考之前的文章[1]。
时间复杂度分析
二叉树排序主要耗时的两个环节为:构建二叉树和中序遍历。
构建二叉树的主要耗时是在比较和移动指针,而比较和树的层数有关,最好情况是变成满二叉树,此时层数最少,为 log2n 层,时间复杂度为 O(nlog2n) 。如果是最坏情况,树变成了一条长链(则数串一开始就是顺序的或者是倒序的)。最后形成的树有n层,时间复杂度为 O(n2) 。对于平均情况,我们将每个节点向左扩展或者向右扩展看成等可能,则可以列出递归式,如下所示T(n)=1n[2∑k=0n−1T(k)]
中序遍历每次会遍历一个元素,对于一个长度为n的数串来说,遍历整棵树一次即可得到结果,其时间复杂度为 O(n) 。
通过不断迭代可以大致估算出T(n)=1.39nlog2n+O(n)
因此总的时间复杂度为