0.题目:
1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
思路:
- 用户输入两个数组的长度len1,len2
- 动态创建两个数组arr1,arr2
- 将arr1,len1,arr2,len2传入mergeArr函数
- mergeArr函数动态创建长度为len1+len2的数组arr。将arr1和arr2的值循环复制到arr中。
1.动态创建数组
int *arr;
arr=(int *)malloc(sizeof(int)*(len1+len2));
或
int *arr;
arr=(int *)calloc(sizeof(int),len1+len2);
2.释放动态分配的空间
free(arr);
3.数组作为函数形参
将函数名作为一个指针传入。
int* mergeArr(int arr1[],int len1,int arr2[],int len2){}
//...
int *arr=mergeArr(arr1,len1,arr2,len2);
4.code
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <map>
using namespace std;
//1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
int* mergeArr(int arr1[],int len1,int arr2[],int len2){
int *arr;
arr=(int *)calloc(sizeof(int),(len1+len2));
int i;
for(i=0;i<len1;i++){
arr[i]=arr1[i];
}
for(i=len1;i<len1+len2;i++){
arr[i]=arr2[i-len1];
}
return arr;
}
int main(){
int len1,len2;
int *arr1,*arr2;
scanf("%d %d",&len1,&len2);
//数组动态分配空间
arr1=(int *)malloc(sizeof(int)*len1);
arr2=(int *)malloc(sizeof(int)*len2);
int i;
for(i=0;i<len1;i++){
scanf("%d",&arr1[i]);
}
for(i=0;i<len2;i++){
scanf("%d",&arr2[i]);
}
//输出
for(i=0;i<len1;i++){
printf("%d ",arr1[i]);
}
cout<<endl;
for(i=0;i<len2;i++){
printf("%d ",arr2[i]);
}
cout<<endl;
int *arr=mergeArr(arr1,len1,arr2,len2);
for(i=0;i<len1+len2;i++){
cout<<arr[i]<<' ';
}
cout<<endl;
//释放资源
free(arr1);
free(arr2);
free(arr);
return 0;
}