【发布时间】:2011-09-03 11:29:34
【问题描述】:
给定一个整数数组,其中前半部分和后半部分已排序。编写一个函数来合并这两个部分以创建一个单独的排序数组(不要使用额外的空间)。 一种方法是 例如: // 1,3,6,8,-5,-2,3,8
int l = 0;
int u = size;
int mid = (l+u)/2;
int i;
for (i = 0; i < mid; i++) {
for (j = mid; j < size; j++) {
if (a[i] >= a[j]) {
temp = a[j];
for (i = mid-1; i >= 0; i--)
a[i+1] = a[i];
a[0] = temp;
}
}
}
但我认为这必须有一些 O(n) 算法..
【问题讨论】:
-
我已经对您的代码进行了一些格式化(使用编辑器上方的
{}按钮),但我认为它可能会更整洁 - 您可以尝试编辑您的问题以使其更清晰。 -
@Damien,更好地格式化它,并添加了缺失的变量类型。
-
这只是归并排序的最后一步。 en.wikipedia.org/wiki/Merge_sort 因此 O(n) 因为合并排序是 O(n log n)
-
@Hogan 只有两个块。