如何在c中的mergesort中制作最坏的情况?

时间:2014-04-13 11:30:24

标签: c mergesort

DataCount是排序数字的次数。

  int* MakeMWData(int DataCount)
  {

// make array

int* Data = (int*)malloc(DataCount*sizeof(int));

int number = 2;
int count = 0;
Data[0] = 1;

//输入数据

int i,j;
for( i = DataCount;; i/=2)
{
    count++;
    for( j = 1; j<DataCount;j++)
    {

//合并排序最差

我认为这是不正确的。

        if(j%i == 0 && j %(i * 2) != 0)
        {
            Data[j] = number;
            number++;
        }
    }
    if(i==1)
        break;
}
for( i = 0; i<DataCount ; i++)
{
    if(Data[i] ==0)
        Data[i] = number;
    number++;
}
return Data;
   }

在主要功能中制作最差数据。

    int* MergeData = MakeMWData(DataCount[i]);

1 个答案:

答案 0 :(得分:2)

mergesort的工作方式是将数组分成两个数组,递归(logn次),直到能够比较元素对。然后它合并递归创建的数组,同时对它们进行排序。

对于某些排序算法(例如快速排序),元素的初始顺序可能会影响要完成的操作数。然而,它并没有对mergesort做任何改变,因为它必须完全执行相同数量的操作:递归地分成小数组,然后将它们合并回来,总共Θ(nlogn)次。