Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用BST对结构数组进行排序的函数的时间复杂度是多少?_C_Algorithm_Sorting_Time Complexity_Binary Search Tree - Fatal编程技术网

C 使用BST对结构数组进行排序的函数的时间复杂度是多少?

C 使用BST对结构数组进行排序的函数的时间复杂度是多少?,c,algorithm,sorting,time-complexity,binary-search-tree,C,Algorithm,Sorting,Time Complexity,Binary Search Tree,我有一个使用BST对数组进行排序的函数。首先,我使用for循环和函数insert创建树(在树中插入数据保持有序) 然后我按顺序访问树,并以排序模式将每个节点复制到新的临时存档中。 这是我的密码: double btree_sort(SPerson Archive[], unsigned int ne, double *btree_creating_time) { int i = 0; TBinaryTree BinaryTree = NULL; cont = 0; LARGE_INTE

我有一个使用BST对数组进行排序的函数。首先,我使用for循环和函数insert创建树(在树中插入数据保持有序) 然后我按顺序访问树,并以排序模式将每个节点复制到新的临时存档中。 这是我的密码:

double btree_sort(SPerson Archive[], unsigned int ne, double    *btree_creating_time)
{
int i = 0;
TBinaryTree BinaryTree = NULL;

cont = 0;

LARGE_INTEGER freq;
LARGE_INTEGER t0, tF, tDiff;

QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&t0);
/*Algorithm*/
for (i = 0; i < ne; i++)       /*Creating B-Tree*/
    BinaryTree = binarytree_insert(BinaryTree, Archive[i]);
QueryPerformanceCounter(&tF);
tDiff.QuadPart = tF.QuadPart - t0.QuadPart;
*btree_creating_time = tDiff.QuadPart / (double)freq.QuadPart;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&t0);
inorder(BinaryTree, Archive);
/*end*/
QueryPerformanceCounter(&tF);
tDiff.QuadPart = tF.QuadPart - t0.QuadPart;

free(BinaryTree);
return tDiff.QuadPart / (double)freq.QuadPart;
}

int  inorder(TBinaryTree BinaryTree, SPerson Archive[])
{
if (BinaryTree)
{
    inorder(BinaryTree->left,Archive);  

    swap(&Archive[cont++], &BinaryTree->information);

    inorder(BinaryTree->right, Archive);

}                  
return 1;
}

 TBinaryTree binarytree_insert(TBinaryTree bt, SPerson to_add)
{
if (bt == NULL)   
{
    TNode *new_node = create_node(to_add);
    if (new_node == NULL) 
    {
        MessageBoxA(0, "Error allocating memory.", "", 0);
        exit(1);
    }
    return new_node;
}
else
{
    if (strcmp(to_add.id, bt->information.id)<0)
    {
        bt->left = binarytree_insert(bt->left, to_add);
        return bt;    
    }
    else
    {
        bt->right = binarytree_insert(bt->right, to_add);
        return bt;  
    }
}
}
double-btree\u排序(SPerson归档[],无符号整数,double*btree\u创建时间)
{
int i=0;
TBinaryTree BinaryTree=NULL;
cont=0;
大整数频率;
大整数t0,tF,tDiff;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&t0);
/*算法*/
对于(i=0;i左,存档);
交换(&Archive[cont++],&BinaryTree->information);
顺序(二进制树->右侧,存档);
}                  
返回1;
}
TBinaryTree二进制树插入(TBinaryTree bt,SPerson to_add)
{
if(bt==NULL)
{
TNode*new_node=创建_node(要添加);
if(新节点==NULL)
{
MessageBoxA(0,“分配内存时出错。”,“”,0);
出口(1);
}
返回新的_节点;
}
其他的
{
if(strcmp(to_add.id,bt->information.id)left=binarytree_insert(bt->left,to_add);
返回bt;
}
其他的
{
bt->right=binarytree\u insert(bt->right,to\u add);
返回bt;
}
}
}
认为:

  • 插入b-树在最佳情况下的时间复杂度为Θ(1),在最坏情况下的时间复杂度为Θ(nlogn)。 (无论如何写Θ是正确的,或者我应该说最好的情况是O,最坏的情况是Ω?)

  • 为了使vist具有Θ(n)的时间复杂度

  • 因此,在树中插入n个元素、访问和交换的时间复杂度为:

    最佳情况:[只有一个元素]Θ(1)+[Θ(1)+Θ(4)][交换函数时间复杂度]

    最坏情况:Θ(nlogn)+[Θ(n)+Θ(4)]


    我说得对吗?有什么建议吗?提前谢谢。

    最坏情况下的复杂性称为O-Big Oh表示法。我们通常只使用最坏情况下的复杂性。同时,在一个Btree中插入所有节点是O(nlogn)。因此,对树进行排序就是插入所有键,然后按复杂度为O(n)的顺序遍历树


    因此,总体复杂度是O(nlogn)+O(n),也就是O(nlogn)

    最坏情况的复杂度被称为O-Big-Oh表示法。我们通常只使用最坏情况的复杂度。同时,在一个Btree中插入所有节点是O(nlogn)。因此,对树进行排序就是插入所有键,然后按复杂度为O(n)的顺序遍历树


    因此,总体复杂度是O(nlogn)+O(n),即O(nlogn)

    二叉搜索树上的插入操作的最坏情况时间复杂度为O(logn)。插入n个数字将是O(nlogn)。然后依次遍历所有n个节点,即O(n)。因此,O(nlogn)+O(n)即O(nlogn).

    二叉搜索树上的插入操作的最坏情况时间复杂度为O(logn)。插入n个数字将是O(nlogn)。然后依次遍历所有n个节点,即O(nlogn)。因此O(nlogn)+O(n)即O(nlogn)。

    我不清楚您所说的“…O到最佳情况…”是什么意思,你是指大O吗?是的,在我的书中我发现了O,比如上限松弛和Ω小于极限松弛。好吧,那么“O”不是最好的情况;作为上限它是最坏的。我不清楚你所说的“…O到最佳情况…”是指大O吗?是的,在我的书中我发现了O,比如上限松弛和Ω小于极限松弛。好的,然后是“O”不是最好的情况;它是最坏的上界。我必须用Θ符号表示。所以它将是:Θ(nlogn)?我必须用Θ符号表示。所以它将是:Θ(nlogn)?我必须用Θ符号表示。所以它将是:Θ(nlogn)?如果你必须用“θ”符号表示(紧界),那么它将是“θ(n)”最好的情况是“theta(nlogn)”,最坏的情况是“theta(nlogn)”。为了概括,我们使用上界“big oh”。我必须用Θ表示法表示。所以它将是:Θ(nlogn)?如果你必须用“theta”表示法(紧界),那么最好的情况是“theta(n)”,最坏的情况是“theta(nlogn)”。为了概括,我们使用上界“big oh”.