我必须对数组进行排序。除了已经存在的排序类型之外,我想知道这样的算法是否可行,以及它的复杂性可能是什么。
我有一个要排序的数组。我创建了一个二叉搜索树。
所以如果我将数组的所有元素都插入到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)
. 因此,据我所知,这应该是一种有效的算法。
谢谢。