要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间.
void MergeArray(int *pArray1, int nLen1, int *pArray2, int nLen2, int *pArray)

{
int i, j, n;
i = j = n = 0;
while (i < nLen1 && j < nLen2) // 循环一直进行到拷贝完某一个数组的元素为止
{
if (pArray1[i] < pArray2[j]) // 拷贝array1的元素
{
pArray[n++] = pArray1[i++];
}
else if (pArray1[i] > pArray2[j]) // 拷贝array2的元素
{
pArray[n++] = pArray2[j++];
}
else // 相等的元素拷贝
{
pArray[n++] = pArray2[j++];
++i;
}
}
if (i == nLen1) // 如果array1已经被拷贝完毕就拷贝array2的元素
{
while (j < nLen2)
pArray[n++] = pArray2[j++];
}
else // 如果array2已经被拷贝完毕就拷贝array1的元素
{
while (i < nLen1)
pArray[n++] = pArray1[i++];
}
}
本文介绍了一个高效的合并排序算法实现,该算法能在最坏情况下达到O(n)的时间复杂度,并且仅使用O(1)的额外空间。通过双指针技术,文章详细展示了如何将两个已排序的整数数组合并成一个新的有序数组。
915

被折叠的 条评论
为什么被折叠?



