C语言—有序序列合并

要求:输入包含三行,

第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数,用空格分隔。

第三行包含m个整数,用空格分隔。

例子:

5 6
1 3 7 9 22
2 8 10 17 33 44

1 2 3 7 8 9 10 17 22 33 44

这种方法比较粗暴简单,但是花费时间代码数量也比较多

#include <stdio.h>
int main()
{
	int n;
	int m;
	//确定俩行的个数
	printf("请输入n和m\n");
	scanf("%d %d", &n, &m);
	int arr1[1000];
	int arr2[1000];
	int i;
	//输入数据
	printf("arr1[]=");
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("\n");
	printf("arr2[]=");
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	printf("\n");
	//一种简单粗暴,比较笨重的方法;
	// 直接将arr1和arr2合并成arr3,在进行冒泡排序
	int arr3[2000];
	int k;
	//先将arr1中的数据给arr3
	for (i = 0,k=0; i < n; i++,k++)
	{
		arr3[k] = arr1[i];
	}
	//再将arr2中的数据给arr3
	for (k = n, i = 0; k < n + m; k++, i++)
	{
		arr3[k] = arr2[i];
	}
	//冒泡排序
	for (i = 0; i < n + m - 1; i++)
	{
		int j;
		for (j = 0; j < n + m - 1 - i; j++)
		{
			if (arr3[j] > arr3[j + 1])
			{
				int tmp = arr3[j];
				arr3[j] = arr3[j + 1];
				arr3[j + 1] = tmp;
			}
		}
	}
	//最后进行打印出来
	printf("arr3[]=");
	for (i = 0; i < n + m; i++)
	{
		printf("%d ", arr3[i]);
	}
	
}

接下来的方法代码数量较少,更加简洁,但对比上面思路比较难

前面不变 

主要思路:1 3 7 9 22    i
                  2 8 10 17 33 44  j
  用k存入arr3数组 i,j,k初始化为0
  用 arr1[i]=1和arr2[j]=2比较 1小 存入arr3[k] 并且k++,i++
  随后将arr1[i]=3和arr2[j]=2比较 2小 存入arr3[k] k++,j++

扫描二维码关注公众号,回复: 17144386 查看本文章


 

#include <stdio.h>
int main()
{
	int n;
	int m;
	//确定俩行的个数
	printf("请输入n和m\n");
	scanf("%d %d", &n, &m);
	int arr1[1000];
	int arr2[1000];
	int i;
	//输入数据
	printf("arr1[]=");
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("\n");
	printf("arr2[]=");
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	printf("\n");
	//直接比较 将arr1中的各个元素与arr2中的对应元素比较
	//1 3 7 9 22    i
	//2 8 10 17 33 44  j
	//思路: 用k存入arr3数组 i,j,k初始化为0
	// 用 arr1[i]=1和arr2[j]=2比较 1小 存入arr3[k] 并且k++,i++
	// 随后将arr1[i]=3和arr2[j]=2比较 2小 存入arr3[k] k++,j++
	int arr3[2000];
	i = 0;
	int k = 0; int j = 0;
	while (i < n && j < m)
	{
		if (arr1[i] < arr2[j])
		{
			arr3[k] = arr1[i];
			k++; i++;
		}
		else
		{
			arr3[k] = arr2[j];
			j++; k++;
		}
	}
	//假如其中一个数组先存完,再将另外一个数组全部存入arr3;
	if (i == n)
	{
		while (j < m)
		{
			arr3[k] = arr2[j];
			k++; j++;
		}
	}
	else
	{
		while (i < n)
		{
			arr3[k] = arr1[i];
			k++; i++;
		}
	}
	//打印arr3数组
	printf("arr3[]=");
	for (k = 0; k < n + m; k++)
	{
		printf("%d ", arr3[k]);
	}
	
}

感谢观看!!!

猜你喜欢

转载自blog.csdn.net/chaodddddd/article/details/132196611