Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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
Sorting 自顶向下合并排序的时间复杂性?_Sorting_Time_Merge_Complexity Theory - Fatal编程技术网

Sorting 自顶向下合并排序的时间复杂性?

Sorting 自顶向下合并排序的时间复杂性?,sorting,time,merge,complexity-theory,Sorting,Time,Merge,Complexity Theory,我知道mergesort的时间复杂度是O(nLogn),但是对于它自上而下的变体,我无法得出这个结论 TopDownMerge(A[], iBegin, iMiddle, iEnd, B[]) { i0 = iBegin, i1 = iMiddle; // While there are elements in the left or right runs for (j = iBegin; j < iEnd; j++) { // If left run head exists a

我知道mergesort的时间复杂度是O(nLogn),但是对于它自上而下的变体,我无法得出这个结论

TopDownMerge(A[], iBegin, iMiddle, iEnd, B[])
{
i0 = iBegin, i1 = iMiddle;

// While there are elements in the left or right runs
for (j = iBegin; j < iEnd; j++) {
    // If left run head exists and is <= existing right run head.
    if (i0 < iMiddle && (i1 >= iEnd || A[i0] <= A[i1]))
        B[j] = A[i0];
        i0 = i0 + 1;
    else
        B[j] = A[i1];
        i1 = i1 + 1;    
    } 
}
TopDownMerge(A[],iBegin,iMiddle,iEnd,B[])
{
i0=iBegin,i1=imidle;
//而左行或右行中有元素
对于(j=iBegin;j//如果左游程头存在且为=iEnd | | A[i0]则您屏蔽的代码只是算法的一部分:执行合并的部分。该部分的复杂度为O(n)。(logn来自算法的另一半,其中数组被反复切分为段。)

首先,让我们定义(有些神秘的)变量的含义:

  • iBegin
    imidle
    iEnd
    表示
    A
    的工作段。左半部分(从
    iBegin
    imidle
    )和右半部分(从
    imidle
    iEnd
    )都已排序并准备合并在一起
  • i0
    A
    工作段的左侧的“下一个”变量的索引
  • i1
    A
    工作段的右侧的一半中的“下一个”变量的索引
  • j
    是工作数组
    B
    中下一个空位的索引
每次通过循环时,从
a
中复制一个元素,并将其放置在
B
数组中
j
位置。
if
语句负责确定该元素是从数组的左半部分还是右半部分获取

if
语句执行(最多)三项检查:

  • 如果
    i0
    ,则在数组的左半部分仍有要处理的元素。如果为false,请转到
    else
    块并从数组的右半部分提取元素
  • 如果
    i1>=iEnd
    ,则在数组的右半部分没有更多的元素要处理。如果这是真的,请输入
    If
    块并从数组的左半部分获取元素

  • 在数组的左右两边都必须有一些元素。比较这两个元素:如果<代码> [i0],抱歉哪种语言?有什么问题?C++,我不知道if语句运行了多少次。