问题描述: 设子数组a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-1).试设计一个合并这两个子数组为排好序的数组a[0:n-1]的算法.要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间. #include <stdio.h>
void DisplayArray(int *pArray, int nLen)
{
for (int i = 0; i < nLen; ++i)
{
printf("array[%d] = %d\n", i, pArray[i]);
}
}
// pArray1和pArray2是已经排好序的数组,要求将它们按照顺序合并到pArray中
// 排序之后的数组不会有重复的元素
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++];
}
}
int main()
{
int array1[] = {1, 4, 5, 7};
int array2[] = {2, 3, 6, 8};
int array3[8];
MergeArray(array1, 4, array2, 4, array3);
printf("Merge Array:\n");
DisplayArray(array3, 8);
return 1;
}
相关推荐
Merge Sorted Array 合并 排序 数组 leetcode
问题:将两个已排序数组合并成一个排序数组 这里先不考虑大数据量的情况(在数据量很大时不知大家有什么好的思路或方法?),只做简单数组的处理。 简单代码如下: 说明:之所以把merge函数定义成返回数组长度,是因为...
两个数组合并并排序.
合并两个已经排序的数组为另一个数组算法,详细介绍并用代码实现,望对大家有帮助!
简单 易懂 随机产生两个数组AB,并排序,然后将两数组合并并排序用C输出
matlab开发-多维数组的合并排序。使用合并排序技术对单个或多维数组进行排序。
给定两个有序数组a b 使合并后的数组仍然有序 归并算法的事件复杂度为O logn
刷题:给两个有序的数组,找出合并后的中位数
合并数组并且转为有序去重集合,我看到很多资源博客,百度都弄的很繁琐,所以自己总结描述了一下
将一个数组中,已经有序的两部分,重新进行排序,得到排序后的有序完整数组。
给定两个已排序的整数数组nums1和nums2,将nums2合并为nums1作为一个已排序的数组。 在nums1和nums2中初始化的元素数分别为m和n。 您可以假定nums1的大小等于m + n,以使其具有足够的空间来容纳nums2中的其他元素。...
对两个已经排好序的数组,进行合并,实现的是从文本中读取数据,执行前需要建立txt文件
主要为大家详细介绍了C++实现两个有序数组的合并,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
使用这个函数可以避免调用 Matlab SORT(),因为两个输入已经排序,所以它做了不必要的工作。 Mex 实现速度。 支持“行”选项
两个有序数组,假设是从大到小排序的,一次循环合并两个数组,合完也是从大到小的顺序。
第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到...
面试题 10.01. 合并排序的数组标签:数组、双指针、排序难度:简单题目大意给定两个排序后的数组 A 和 B,以及 A 的元素数量 m 和 B 的元素数量 n