xml地图|网站地图|网站标签 [设为首页] [加入收藏]

合并数组,数组合并问题的解法

来源:http://www.ccidsi.com 作者:呼叫中心培训课程 人气:56 发布时间:2019-11-14
摘要:统大器晚成有序数组,合并数组  描述:有八个有序数组A,B,内部存款和储蓄器A在A的终极有丰裕多的半空中容纳B,完结函数:把B中的全体数字插入到A中,并且维持A中的全体数字是

统大器晚成有序数组,合并数组

 描述:有八个有序数组A,B,内部存款和储蓄器A在A的终极有丰裕多的半空中容纳B,完结函数:把B中的全体数字插入到A中,并且维持A中的全体数字是排序的。

有三个排序数组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("%dt", 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 }

图片 1

有七个排序数组A1和A2,内部存款和储蓄器在A1的结尾有足够多的空余空间容纳A2,完成多少个函数,把A2 插入到A1,並且是平稳的...

解法:

 

 1 #include<stdio.h> 
 2 #include<string.h>
 3 
 4 void newArray( char stringA[], char stringB[], int length){
 5     if(stringA == NULL && stringB == NULL && length < 0)
 6         return;
 7     
 8     int lengthA = 0;
 9     int lengthB = strlen(stringB);
10 
11     int i = 0;
12     
13     while(stringA[i] != '\0'){
14           lengthA;
15           i;
16     }
17         
18     int newLength = lengthA   lengthB;
19     if(newLength > length)
20         return;
21         
22     int indexofA = lengthA - 1;
23     int indexofB = lengthB - 1;
24     int indexNew = newLength - 1;
25 
26     while(indexofA >= 0 && indexofB >= 0){
27         if(stringA[indexofA] > stringB[indexofB]){
28             stringA[indexNew--] = stringA[indexofA];             
29             indexofA--;                                     //A数组的索引向前移动一位
30         }
31         else{
32             stringA[indexNew--] = stringB[indexofB];        
33             indexofB--;                                     //B数组的索引向前移动一位
34         }
35     }
36     
37 //    printf("%d %dn", indexofA, indexofB);
38     
39     if(indexofA >= 0){
40         return;
41     }
42     if(indexofB >= 0){                                      //将剩下的B数组中的内容拷贝到A中
43         while(indexofB >= 0){
44         stringA[indexNew--] = stringB[indexofB];
45         indexofB--;
46         }
47     }
48     stringA[newLength   1] = '\0';
49     
50 }
51 
52 int main(){
53     char str1[20] = {6, 8, 20};
54     char str2[4] = { 1, 3, 4, 30};
55     newArray(str1, str2, 20);
56     int j = 0;
57     while(str1[j] != '\0'){
58         printf("%d  ", str1[j]);
59         j  ;
60     }
61     return 0;
62 }

 

算法安详严整:

本文由68399皇家赌场发布于呼叫中心培训课程,转载请注明出处:合并数组,数组合并问题的解法

关键词: 68399皇家赌场 算法

最火资讯