对于赋值,我们将在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
都初始设置为零。就像我说的那样,这很有效,因为你必须改变一切。我想在排序之前将子数组拆分成两个临时数组,但是你可能无法创建长度未定义为常量的数组。我还应该注意,虽然我可以使用辅助函数,但我无法更改函数参数:必须有一个指向数组的指针和长度。
答案 0 :(得分:2)
您可以创建长度不等的数组,Google malloc
。合并排序需要使用辅助内存才能正常工作。完成后,free
必须malloc
分配内存。