给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
数据范围: ,,
注意:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了,且后台会自动将合并后的数组 A 的内容打印出来,所以也不需要自己打印
3. A 数组在[0,m-1]的范围也是有序的
[4,5,6],[1,2,3]
[1,2,3,4,5,6]
A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge里面,然后请同学完成merge函数,将B的数据合并A里面,最后后台程序输出A数组
[1,2,3],[2,5,6]
[1,2,2,3,5,6]
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int i = ALen - 1, j = BLen - 1, k = ALen + BLen - 1; while (i >= 0 && j >= 0) { if (A[i] >= B[j]) A[k--] = A[i--]; else A[k--] = B[j--]; } while(i < 0 && j>=0) A[k--] = B[j--]; while(j < 0 && i>=0) A[k--] = A[i--]; }
#include <stdlib.h> void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here //暂时存放A数组元素 int *arr=(int*)malloc(ALen*sizeof(int)); for(int i=0;i<m;i++) { arr[i]=A[i]; } //定义双指针 int*p1=arr; int*p2=B; int count=0; //从小端开始遍历,小的元素放前面 while(p1!=&arr[m]&&p2!=&B[n]&&m>=0&&n>=0) { A[count++]=*p1>*p2?*p2++:*p1++; } //若还有未遍历完的元素,因此放入A数组后面 while(p1!=&arr[m]) { A[count++]=*p1++; } while(p2!=&B[n]) { A[count++]=*p2++; } //释放堆空间 free(arr); }
class Solution { public: void merge(int A[], int m, int B[], int n) { int sum=m+n-1; int i=m-1,j=n-1; while(i>=0&&j>=0) { A[sum--]=A[i]>B[j]?A[i--]:B[j--]; } while(j>=0) { A[sum--]=B[j--]; } } };
/* 双指针,不会浪费多余的空间 */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int i = m-1 ; int j = n-1 ; int k = n+m-1 ; int end ; int *p ; while((i>=0)&&(j>=0)){ if(A[i] > B[j]){ A[k] = A[i] ; k-- ; i-- ; }else{ A[k] = B[j] ; k-- ; j-- ; } } if(i>=0){ end = i ; p = A ; } else if(j>=0){ end = j ; p = B ; } while(end>=0){ A[k] = p[end] ; --k ; --end ; } ALen = m+n ; BLen = n ; }
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void * * C语言声明定义全局变量请加上static,防止重复定义 */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int end1 = m-1; //第一个数组的长度 int end2 = n-1; //第二个数组的长度 int end = m+n-1; //第一个数组的总长度 while(end1>=0 && end2>=0) { if(A[end1] > B[end2]) { A[end] = A[end1]; end--; end1--; } else { A[end] = B[end2]; end--; end2--; } } while(end2>= 0) { A[end--] = B[end2--]; } }
void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int* C=(int*)malloc(sizeof(int)*(m+n)); for (int i = 0; i < n; i++) { A[m + i] = B[i]; } for(int i=0;i<m+n-1;i++) { for(int j=0;j<m+n-1-i;j++) { if(A[j]>A[j+1]) { int temp=A[j]; A[j]=A[j+1]; A[j+1]=temp; } } } }
void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int i,j,tmp; i = ALen; j = 0; while(i<ALen+BLen) { A[i] = B[j]; i++; j++; } for(i = 0;i<ALen+BLen;i++) { for(j = 0;j<ALen+BLen-i-1;j++) { if(A[j]>A[j+1]) { tmp = A[j]; A[j] = A[j+1]; A[j+1] = tmp; } } } }
#include <math.h> int cmp(const void* e1, const void* e2) { return *(int*)e1 - *(int*)e2; } void merge(int* A, int ALen, int m, int* B, int BLen, int n) { //把B数组合并到A数组后qsort升序排一下 //这里其实没必要传ABLen过来,有mn就够了 int i = 0, j = 0; for(i=m; i<ALen+BLen; i++) { A[i] = B[j++]; } qsort(A, ALen+BLen, sizeof(int), cmp); }
void merge(int* A, int ALen, int m, int* B, int BLen, int n) { int i = m - 1, j = n - 1, k = m + n - 1; while (i >= 0 && j >= 0) *(A + k--) = *(A + i) > *(B + j) ? *(A + i--) : *(B + j--); while (j >= 0) *(A + k--) = *(B + j--); }
void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here if(B==NULL||BLen<=0||n<=0) return; for(int i=m-1,j=n-1,t=m+n-1;i>=0||j>=0;) { if(i<0) A[t--]=B[j--]; if(j<0) A[t--]=A[i--]; if(i>=0&&j>=0){ if(A[i]>B[j]) A[t--]=A[i--]; else A[t--]=B[j--]; } } }
void merge(int* A, int ALen, int m, int* B, int BLen, int n) { // write code here int temp[1000] = {0}; int i, j, idx; i = j = idx = 0; while (j < n) { if (i < m) { temp[idx++] = A[i] < B[j] ? A[i++] : B[j++]; } else { temp[idx++] = B[j++]; } } while (i < m) { temp[idx++] = A[i++]; } for (i = 0; i < m + n; i++) { A[i] = temp[i]; } }
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { int i,j; j=0; int p; for(i=m;i<(BLen+ALen);i++) { if(j != n) { A[i] = B[j] ; j++; } } for(i=0;i<(BLen+ALen);i++) { for(j=i;j<(BLen+ALen);j++) { if(A[i]>A[j]) { p =A[i]; A[i] =A[j]; A[j]= p; } } } for(i=0;i<6;i++) { printf("%d",A[i]); } // write code here }
/** * * @param A int整型一维数组 * @param ALen int A数组长度 * @param B int整型一维数组 * @param BLen int B数组长度 * @return void */ void merge(int* A, int ALen, int m, int* B, int BLen, int n) { int i=ALen-1,j=BLen-1,index=ALen+BLen-1; while(i>=0 && j>=0) { if(A[i]>B[j]) { A[index--] = A[i--]; }else { A[index--] = B[j--]; } } while(j>=0) { A[index--] = B[j--]; } }