思路:
设两个分别指向两数组的指针,只需比较这两个指针指向得数据,若从小到大排序:小数据的指针+1,并将其放到第三个数组中
问题:一个数组到结尾怎么办?
将另一个数组按顺序全部放入第三个数组
#include <stdio.h>
//合并两个有序数组,使之有序
void merge_arry(int* arr1,int n1,int* arr2,int n2,int* arr3,int n3)//传递三个数组,前两个为待合并,第三个为合并后
{
//思路:
//设两个分别指向两数组的指针,只需比较这两个指针指向得数据,
//若从小到大排序:小数据的指针+1,并将其放到第三个数组中
//一个数组到结尾怎么办?
//将另一个数组按顺序全部放入第三个数组
int i = 0;
int j = 0;
int k = 0;
int flag_i = 0;
int flag_j = 0;
while (1)
{
if(i>n1-1)
{
flag_i = 1;
break;
}
if(j>n2-1)
{
flag_j = 1;
break;
}
if(*(arr1+i)<*(arr2+j))
{
*(arr3+k) = *(arr1+i);
i++;
k++;
}
else
{
*(arr3+k) = *(arr2+j);
j++;
k++;
}
}
if(flag_i == 1)//说明是第一个数组都放入了第三个数组,那么将第二个数组放入第三个数组即可
{
while (arr2+j<arr2+n2)
{
*(arr3+k) = *(arr2+j);
k++;
j++;
}
}
else
{
while (arr1+i<arr1+n1)
{
*(arr3+k) = *(arr2+i);
k++;
i++;
}
}
}
int main(int argc, char *argv[])
{
int arr1[4]={1,3,5,7};
int arr2[4]={2,4,6,8};
int arr3[8]={0};
merge_arry(arr1,4,arr2,4,arr3,8);
int i = 0;
for(i = 0;i<8;i++)
{
printf("%d\n",arr3[i]);
}
printf("Hello World!\n");
return 0;
}