C语言合并两个有序数组,时间复杂度为O(n),空间复杂度O(1)
2017-12-26 15:54
471 查看
#include<stdio.h> #include<string.h> /* func: 合并两个有序数组 arrSrc:将另一有序数组arrDest合并至该数组 arrDest:将该数组合并至另一有序数组arrSrc captionSrc:arrSrc的容量大小,保证能保存arrSrc + arrDest lenSrc:arrSrc数组的现有有效元素个数 lenDest:arrDest数组的现有有效元素个数 */ void mergeArray(int* arrSrc, int* arrDest,int captionSrc,int lenSrc, int lenDest) { if(NULL == arrSrc || NULL == arrDest || ((lenSrc + lenDest) > captionSrc)) { return; } int indexOfNew = lenSrc + lenDest - 1; //新数组的末位索引 int indexOfSrc = lenSrc - 1;//arrSrc有效元素的末位索引 int indexOfDest = lenDest - 1;//arrDest有效元素的末位索引 //当arrDest全部扫描完成,元素全部插入arrSrc,剩余arrSrc元素不需要移位操作 //当arrSrc全部遍历完成,但arrDest仍有元素时,只需要操作arrDest即可,此时arrSrc下标已达最小值0 while (indexOfDest >= 0) { if (indexOfSrc >= 0){ //将arrSrc或arrDest中较大的元素放入arrSrc新位置,同时移动变化数组的指针位置 if (arrSrc[indexOfSrc] >= arrDest[indexOfDest]) { arrSrc[indexOfNew] = arrSrc[indexOfSrc]; --indexOfNew; --indexOfSrc; }else{ arrSrc[indexOfNew] = arrDest[indexOfDest]; --indexOfNew; --indexOfDest; } } else { arrSrc[indexOfNew] = arrDest[indexOfDest]; --indexOfNew; --indexOfDest; } } } int main(void) { int arrSrc[100] = {1,1,1,1,1,1,3,5,7,9}; int arrDest[6] = {2,4,6,8,10,12}; mergeArray(arrSrc, arrDest, 100, 10, 6); printf("after merge ,arrSrc is:\n"); for(int i = 0; i < 16; ++i) { printf("%d ",arrSrc[i]); } printf("\n"); return 0; }
相关文章推荐
- 两个有序数组(升序)合并、去重,最后得到有序数组,时间复杂度O(n)
- 合并两个排序数组(时间复杂度O(n))
- 算法面试题——两个有序数组,将一个数组放入另一个空间很大的数组,要求合并之后依然有序,时间复杂度要求最小,不使用额外的数组。
- 合并两个有序链表--实现1+2+3+....+n,时间复杂度为O(1)
- C语言实现:合并两个有序的数组,合并后的数组依然有序
- 两个无序数组分别叫A和B,长度分别是m和n,求中位数,要求时间复杂度O(m+n),空间复杂度O(1) 。
- 找出和值等于指定值的元素,如有序数组{1,2,6,23,43,64},求和等于25的两个和数则将是元素2和23,时间复杂度是0(n)。
- 两个无序数组分别叫A和B,长度分别是m和n,求中位数,要求时间复杂度O(m+n),空间复杂度O(1) 。
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- 百度的面试题 合并两个有序的数组
- 两个有序数组合并成一个有序数组
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 【合并两个有序的子数组】算法实现
- 将两个数组中的元素有序存入到一个链表中(C语言)
- 从两个数组中查找相同的数字谈Hashtable 时间复杂度O(n) 引申 布隆过滤器
- 将两个数组A和B合并为一个有序的C数组
- 两个有序单链表的合并&两个有序数组的合并
- 两个数组合并C语言(代码)