【发布时间】:2012-07-13 12:51:23
【问题描述】:
我必须对数组进行排序。除了已经存在的排序类型之外,我想知道这样的算法是否可行,以及它的复杂性可能是什么。
我有一个要排序的数组。我创建了一个二叉搜索树。
所以如果我将数组的所有元素都插入到BST中,然后在进行树的中序遍历时将它们一一分配回数组,我将得到排序的结果。 (虽然由于树节点而消耗更多的空间复杂度。不是就地排序。)
int i=0;
void sort_by_inorder(node *n)
{
if(n==NULL)
{
return;
}
sort_by_inorder(n->leftchild);
array[i++]=n->data;
sort_by_inorder(n->rightchild);
}
我知道 BST 不允许重复插入,所以也许我们可以考虑将 BST 插入算法修改为 = 用于右子树。
这是一个很好的实现(可行)吗?复杂度是多少?
平均遍历复杂度为O(n)。插入只是O(log n)。所以在我看来,这应该是一种有效的算法。
谢谢。
【问题讨论】:
-
每次插入都是 O(log n),所以你实际上以 O(n*log n) 结束
-
您应该进行有序遍历,而不是预先遍历。
-
@DylanM。是的。对不起。我的代码是中序遍历,但名称是前序遍历。已编辑。
标签: tree complexity-theory sorting binary-search-tree