树排序性能

问题描述

我有一个 AVL 树实现,其中插入方法在 O(log n) 时间内运行,返回有序列表表示的方法在 O(n^2) 时间内运行。如果我有一个需要排序的列表。通过使用 for 循环,我可以遍历列表并将每个元素插入到 AVL 树中,该树将在 O(n log n) 时间内运行。那么整个排序算法的性能如何(即遍历列表,插入每个元素,然后使用中序遍历返回一个已排序的列表)?

解决方法

您正确地说向树添加 n 个元素需要时间 O(nlog(n))。 BST 的简单有序遍历可以在时间 O(n) 内执行。因此,可以在时间 O(nlog(n) + n) = O(nlog(n)) 中获得元素的排序列表。如果从树中生成排序列表的算法的时间复杂度是二次的(即 O(n^2) 但并不总是 O(n)),则您描述的过程的最坏情况时间复杂度为 O(nlog (n) + n^2) = O(n^2),这不是最优的。