输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围:
, 序列中的值满足 
输入包含三行,
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含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=0;
int m=0;
scanf("%d %d",&n,&m);
int arr1[2000]={0};
//int arr2[1000]={0};
for(int i=0;i<n;i++)
{
scanf("%d ",&arr1[i]);
}
for(int i=n;i<(n+m);i++)
{
scanf("%d ",&arr1[i]);
}
int temp=0;
for(int i=0;i<n+m;i++)
{
for(int j=i+1;j<n+m;j++)
{
if(arr1[j]<arr1[i])
{
temp=arr1[i];
arr1[i]=arr1[j];
arr1[j]=temp;
}
}
}
for(int i=0;i<n+m;i++)
{
printf("%d ",arr1[i]);
}
return 0;
} int main()
{
int num1 = 0;
int num2 = 0;
int nums1[1000];
int nums2[1000];
int sums[2001];
scanf("%d %d", &num1, &num2);
int i = 0;
int j = 0;
int n = 0;
n = num1 + num2;
for (i = 0; i < num1; i++)
{
scanf("%d", &nums1[i]);
}
for (i = 0; i < num2; i++)
{
scanf("%d", &nums2[i]);
}
for (i = 0; i < num1; i++)
{
sums[i] = nums1[i];
}
for (i = 0; i < num1+num2; i++)
{
sums[num1 + i] = nums2[i];
}
int t = 0;
for (i = 0; i < num1 + num2 - 1; i++)
{
for (j = 0; j < num1 + num2 - 1 - i; j++)
{
if (sums[j] > sums[j + 1])
{
t = sums[j];
sums[j] = sums[j + 1];
sums[j + 1] = t;
}
}
}
for (i = 0; i < num1 + num2; i++)
{
printf("%d ", sums[i]);
}
return 0;
} 创建3个数组,把12数组赋值到数组3,再冒泡排序
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d",&a,&b);
int arr1[1000] = {0};
int arr2[1000] = {0};
int arr3[1000] = {0};
//接收第一组数组
for(int i = 0;i<a;i++)
{
scanf("%d ",arr1+i);
}
//接收第二组数组
for(int j = 0;j<b;j++)
{
scanf("%d ",arr2+j);
}
//合并两个数组
for(int m = 0;m<a+b;m++)
{
if(m<a)
{
arr3[m] = arr1[m];
}
else {
int n = m-a;
arr3[m] = arr2[n];
}
}
//冒泡排序
for(int q = a+b-1;q>0;q--)
{
for(int w = 0;w<q;w++)
{
if(arr3[w]>arr3[w+1])
{
int tmp = arr3[w];
arr3[w] = arr3[w+1];
arr3[w+1] = tmp;
}
}
}
//打印
for(int e = 0;e<a+b;e++)
{
printf("%d ",arr3[e]);
}
return 0;
} #include<stdio.h>
void My_scanf(int arr[], int x) //输入
{
int i = 0;
for(i=0;i<x;i++)
{
scanf("%d ",&arr[i]);
}
}
void Sort(int arr3[],int n) //冒泡排序
{
int i = 0;
int j = 0;
int g = 0;
int temp = 0;
for(i = 0; i< n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(arr3[i]> arr3[j])
{
temp = arr3[i];
arr3[i] = arr3[j];
arr3[j] = temp;
}
}
}
}
void combine(int arr1[],int arr2[],int arr3[],int n,int m)//合并两个数组
{
int i = 0;
int j = 0;
for(i=0;i<n;i++)
{
arr3[i]=arr1[i];
}
for(j=0;j<m;j++)
{
arr3[j+n]=arr2[j];
}
}
void My_printf(int arr3[],int k)//输出
{
int i = 0;
for(i=0;i<k;i++)
{
printf("%d ",arr3[i]);
}
}
int main()
{
int n =0;
int m = 0;
scanf("%d %d",&n,&m);
int arr1[n];
int arr2[m];
int arr3[n+m];
My_scanf(arr1,n);
My_scanf(arr2,m);
combine(arr1,arr2,arr3,n,m);
Sort(arr3,n+m);
My_printf(arr3,n+m);
return 0;
} #include <stdio.h>
int main() {
int n=0, m=0;
int i=0,j=0;
scanf("%d %d",&n,&m);
int arr[30000]={0};
for(int i=0;i<n+m;i++){
scanf("%d",&arr[i]);
}
//排序,排成升序
for(i=0;i<n+m-1;i++){//比较的趟数
for(j=0;j<n+m-1-i;j++){//每一趟比较的对数
int tmp=0;
if(arr[j]>arr[j+1]){//前一个数和后一个数比较
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
//输出
for( i = 0;i<n+m;i++){
printf("%d",arr[i]);
if(i<n+m-1){//如果不是最后一个元素,打印空格
printf(" ");
}
}
return 0;
}