将2个已知有序的数组合并为一个新的有序数组。如下代码,已有两个数组 arr1 和 arr2,要求将两个数组中元素合并到数组 arr3 中,合并时要去除数组中的重复数据。在下面代码中的补全代码处,补全下面代码实现相应功能。在补全处可以定义新的变量来完成合并功能。
#include <stdio.h>
void sort(int *a,int N)//编写sort函数
{
for (int i = 0; i < N - 1; i++)
{
int min = i;
for (int j = i + 1; j < N; j++) if (a[min] > a[j]) min = j;
int t = a[min]; a[min]=a[i];a[i] =t;
}
}
int main(void)
{
int arr1[] = {3,6,8,9,9,11,45};
int arr2[] = {1,3,6,8,45,89};
int arr3[20];
int i, len;
// 补全代码处
int j,k;
for(i = 0; i < 7; i ++)//对于arr1[]的元素进行查重
{
for(j = i+1; j <7; j ++)//对后面每个元素比较,去重。
{
if(arr1[j] == arr1[i])//发现重复元素。
{
for(k = j+1; k<7; k ++)//依次前移一位。
arr1[k-1] = arr1[k];
}
}
}
for (i = 0; i < 7; i++)arr3[i] = arr1[i];//先将arr1的元素赋值给arr3
for(i=0;i<7;i++)//利用for循环嵌套,将arr1和arr2相同的元素变成0,进行筛选
{
for (j = 0; j < 6; j++)
{
if (arr1[i] == arr2[j])
arr2[j] = 0;
}
}
len = 6;
for(i=0;i<6;i++)//将arr2的元素赋值给arr3
{
if(arr2[i]>0){
arr3[len] = arr2[i];
len++;
}
}
for(i=0;i<len;i++){
sort(arr3,len);//对arr3进行从小到大排序
}
for (i=0; i<len; ++i)
{
printf("%d ", arr3[i]);
}
printf("\n");
// 预期输出结果:1 3 6 8 9 11 45 89
return 0;
}
刚刚入门c语言,以上是我个人的解决办法,个人感觉代码中应该会有很多可以删除或者简化的地方,希望大家可以和我交流一下,如何改进这个代码