给定2个非降序序列,要求把他们合并成1个非降序序列。假设所有元素个数为N,要求算法的时间复杂度为O(N)。
输入格式:
输入有4行。
第1行是一个正整数m,表示第2行有m个整数,这些整数构成一个非降序序列,每个整数之间以空格隔开。第3行是一个正整数n,表示第4行有n个整数,这些整数也构成一个非降序序列,每个整数之间以空格隔开。
输出格式:
把第2行的m个整数和第4行的n个整数合并成一个非降序序列,输出这个整数序列。每个数之间隔1个空格。
输入样例:
6
1 3 6 6 8 9
4
2 4 5 7
输出样例:
1 2 3 4 5 6 6 7 8 9
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void*a,const void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int m,n;
scanf("%d",&m);
int c[m];
for(int i=0;i<m;i++)
{
scanf("%d",&c[i]);
}
scanf("%d",&n);
int b[n];
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
int a[m+n];
for(int i=0;i<m;i++)
{
a[i]=c[i];
}
for(int i=0;i<n;i++)
{
a[m+i]=b[i];
}
qsort(a,m+n,sizeof(int),cmp);
for(int i=0;i<n+m;i++)
{
printf("%d ",a[i]);
}
}
这么写我感觉是最简单的方法,思路也很简单 ,但是好像没怎么体现算法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int data;
struct node*next;
}node,*listnode;
listnode creative(int n)
{
listnode head;
head=(node*)malloc(sizeof(struct node));
head->next=NULL;
node*p,*rear;
p=rear=head;
for(int i=0;i<n;i++)
{
p=(node*)malloc(sizeof(struct node));
scanf("%d",&p->data);
rear->next=p;
rear=p;
}
rear->next=NULL;
return head;
}
listnode marge(listnode s1,listnode s2)
{
if(s1==NULL)
{
return s2;
}
else if(s2==NULL)
{
return s1;
}
else
{
if(s1->data < s2->data)
{
s1->next=marge(s1->next,s2);
return s1;
}
else
{
s2->next=marge(s2->next,s1);
return s2;
}
}
}
void print(node*l1)
{
l1=l1->next;
while(l1->next!=NULL)
{
l1=l1->next;
printf("%d ",l1->data);
}
printf("\n");
}
int main()
{
int n,m;
scanf("%d",&n);
listnode s1;
s1=(node*)malloc(sizeof(struct node));
s1=creative(n);
scanf("%d",&m);
listnode s2;
s2=(node*)malloc(sizeof(struct node));
s2=creative(m);
listnode l1=NULL;
l1=marge(s1,s2);
print(l1);
}
又写了一种方法 数据结构的链表写法 过几天把自学c++的链表也传上去!
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node* next;
}node,*listnode;
void creative(listnode &L,int n) {
L=new node;
L->next = NULL;
listnode pre = L;
listnode p;
for (int i = 0;i < n;i++) {
p = new node;
cin >> p->data;
pre->next = p;
pre = p;
p->next = NULL;
}
}
void marge(listnode &L1, listnode &L2, listnode &s) {
s = L1;
listnode a=L1->next, b=L2->next,c=s;
while (a && b)
{
if (a->data < b->data) {
c->next = a;
c = c->next;
a = a->next;
}
else
{
c->next = b;
c = c->next;
b = b->next;
}
}
c->next = a ? a : b;
delete L2;
}
void print(listnode s)
{
s=s->next;
while(s)
{
cout << s->data;
s=s->next;
cout << " ";
}
cout << endl;
}
int main()
{
int n,m;
cin>>n;
listnode L1;
creative(L1,n);
cin>>m;
listnode L2;
creative(L2,m);
listnode s=NULL;
marge(L1,L2,s);
print(s);
}