合并有序数组
Posted 三颗心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并有序数组相关的知识,希望对你有一定的参考价值。
有两个排序数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,实现一个函数,把A2插入到A1,并且是有序的。
分析:从尾到头比较A1和A2的数字,并把较大的数字复制到合适的位置。
1 #include <stdio.h> 2 #include "stdafx.h" 3 4 void DisplayArray(int* pArray, int nLength) 5 { 6 for(int i = 0 ; i < nLength; ++i) 7 printf("%d\\t", pArray[i]); 8 printf("\\n"); 9 } 10 11 int *MergeArray(int* pArray1, int nLength1, int* pArray2, int nLength2, int* pArray3) 12 { 13 if(pArray1 == NULL || pArray2 == NULL) 14 return NULL; 15 16 int k = nLength1 + nLength2 -1; 17 int i = nLength1 - 1; 18 int j = nLength2 - 1; 19 20 //先将array1复制到array3前面 21 for(int n = 0 ; n <= i; n ++) 22 pArray3[n] = pArray1[n]; 23 24 25 //从后往前比较array1和array2 26 while(i >= 0 && j >=0) 27 { 28 if(pArray1[i] > pArray2[j]) 29 pArray3[k --] = pArray1[i --]; 30 else 31 pArray3[k--] = pArray2[j--]; 32 } 33 while(j >= 0) 34 pArray3[k --] = pArray2[j --]; 35 36 return pArray3; 37 } 38 39 int main() 40 { 41 int array1[] = {1,4,5,7}; 42 int length1 = sizeof(array1)/sizeof(int); 43 printf("array1 is: "); 44 DisplayArray(array1, length1); 45 46 int array2[] = {2,3,6,8}; 47 int length2 = sizeof(array2)/sizeof(int); 48 printf("array2 is: "); 49 DisplayArray(array2, length2); 50 51 int length3= length1 + length2; 52 int array3[length3]; 53 54 int *pArray3 = MergeArray(array1,length1,array2,length2,array3); 55 printf("Merge Array: \\n"); 56 DisplayArray(pArray3, length3); 57 58 return 0; 59 }
以上是关于合并有序数组的主要内容,如果未能解决你的问题,请参考以下文章