合并带有ON * log [N]运行时的C语言

问题描述

|| 对于分配,我们将使用C编写合并排序函数
sort(int* array,unsigned len);
我已经编写并运行了代码,但是它的运行时为
O(N^2*log[N])
,无法达到合并排序的目的。效率低下的原因是合并部分如下:
while(ct1 < len1 && ct2 < len2){
    if(array[0] < array[len1 - ct1]){
        ct1++;
        array++;    // no longer look at that element
    }
    else{
        int position = len1 - ct1;
        int hold = array[position];
        while(position > 0){
            array[position] = array[position - 1];
            position--;
        }
        array[0] = hold;
        ct2++;
        array++;
    }
}
其中
ct1
是左侧列表的计数器,
ct2
是右侧列表的计数器,array是指向数组的指针。
ct1
ct2
都初始设置为零。就像我说的那样,这行之有效,只是效率低下,因为您必须转移一切。我想在排序之前将子数组分成两个临时数组,但是您可能无法创建其长度未定义为常量的数组。我还应该注意,尽管我可以使用辅助函数,但不能更改函数参数:必须有一个指向数组的指针和长度。     

解决方法

您可以创建非固定长度的数组,即Google
malloc
。合并排序需要使用辅助存储器才能正常工作。完成后,必须由
malloc
分配的
free
内存。