合并两个排序的一半,无需额外的内存!
|
给定一个整数数组,其前半部分和后半部分已排序。编写一个函数将两个部分合并以在原位置创建一个单个排序的数组(不要使用多余的空间)。
一种方法是
例如:
// 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)算法。
没有找到相关结果
已邀请:
5 个回复
醒荒捆府绣
脖呐
伞腹
是作弊吗?你决定。但是,排序是就地完成的,并且缓存的数字被整齐地藏在调用堆栈的本地空间中,在这里您无法真正分配/取消分配它们。 可以进行额外的优化,但这是对核心思想的改进:使用递归和调用堆栈来缓存信息。
芭隘的盘石
究补闯