合并带有O(N * 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
都初始设置为零。就像我说的那样,这行之有效,只是效率低下,因为您必须转移一切。我想在排序之前将子数组分成两个临时数组,但是您可能无法创建其长度未定义为常量的数组。我还应该注意,尽管我可以使用辅助函数,但不能更改函数参数:必须有一个指向数组的指针和长度。
没有找到相关结果
已邀请:
1 个回复
誓猎贰
。合并排序需要使用辅助存储器才能正常工作。完成后,必须由
分配的
内存。