我必须对数组进行排序。除了已经存在的排序类型之外,我想知道这样的算法是否会成功,以及它的复杂性可能是什么。
我有一个要排序的数组。我创建了一个二叉搜索树。
因此,如果我将数组的所有元素插入到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)
。因此,据我所知,这应该是一种有效的算法。
感谢。
答案 0 :(得分:0)
在一般的二叉搜索树中,插入时间实际上是最坏情况下的O(n)。操作的平衡树需要为O(log(n))。
因此,在一般的BST中,您的方法允许您在O(n ^ 2)中进行排序。