C语言中数组的合并

Python010

C语言中数组的合并,第1张

//两个数组合并,参考代码:

#include "stdio.h"

int d=0 //用于记录数组c的大小,和数组c的输出类的一些操作

void main()

{

int a[50],b[50],c[100]

int i,j,k //i表示a数组的大小 j表示b数组的大小 k用于数组的输出

printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n")

scanf("%d",&i)

for(k=0k<ik++)

scanf("%d",&a[k])

printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n")

scanf("%d",&j)

for(k=0k<jk++)

scanf("%d",&b[k])

void px(int *p,int n) //声明 排序 冒泡法

px(a,i) //调用

px(b,j) //调用

void prin(int *p,int n) //声明 数组的输出函数

prin(a,i)

prin(b,j)

void hb(int *o,int *p,int *q,int m,int n)//声明 两个数组的合并函数 前提:这俩个数组必须是排好序的

hb(c,a,b,i,j)

prin(c,d)

}

void px(int *p,int n) //自定义函数 排序 冒泡法

{int i,j,t,leap

for(i=0i<n-1i++) //外层循环n-1次,一次循环沉淀一个数

{

leap=0 //leap作为标记,是否两数相换

for(j=0j<n-i-1j++) //内循环n-i-1次

{

if(p[j]>p[j+1])//比较两个数

{

t=p[j]

p[j]=p[j+1]

p[j+1]=t //来两个数交换

leap=1//交换了,标记leap=1

}

}

if(leap==0) break //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。

}

}

void prin(int *p,int n) //自定义函数 数组输出函数

{

int k,sum=0

for(k=0k<nk++)

{

printf("%d ",p[k])

sum++

if(sum%10==0) printf("\n")

}

printf("\n")

}

void hb(int *o,int *p,int *q,int m,int n) //m为p指向数组的大小 n为q指向数组的大小 指针o指向合并的数组

{

int i=0,j=0,k//i为p指向数组的大小 j为q指向数组的大小

while(1)

{

if(p[i]<q[j])

{

o[d]=p[i]

i++

d++

}

else

{

o[d]=q[j]

j++

d++

}

if(i==m||j==n) break

}

if(i==m)

{

for(k=jk<nk++)

{

o[d]=q[k]

d++

}

}

if(j==n)

{

for(k=ik<mk++)

{

o[d]=p[k]

d++

}

}

}

//O(n),完成合并

#include<stdio.h>

int merge(int a[],int b[],int n,int m){//合并两个有序数组

//原理是归并排序的合并阶段

//两个有序数组合并,仍保持有序

int i=0,j=0

int c[100]={0}//存储合并后的数组

int k=0

while(i<n&&j<m){

if(a[i]<b[j]){

c[k++]=a[i++]

}

else{

c[k++]=b[j++]

}

}

while(i<n){

c[k++]=a[i++]

}

while(j<m){

c[k++]=b[j++]

}

for(int i=0i<ki++){

a[i]=c[i]//合并后的数组存入a数组

}

return k//返回合并后的数组长度

}

void print(int a[],int n){//打印数组

for(int i=0i<ni++){

printf("%d ",a[i])

}

printf("\n")

}

int main(){

int a[20]={1,2,3}

int b[20]={4,5,6}

int c[20]={7,8,9}

int len1=3//数组a的长度

int len2=3//数组b的长度

int len3=3//数组c的长度

int len=0//合并数组长度

//经过两次合并

len=merge(a,b,len1,len2)//数组a,b合并,存入数组a

printf("a,b合并\n")

print(a,len)//打印a,b合并结果

len=merge(a,c,len,len3)//数组a,b,c合并,存入数组a

printf("a,b,c合并\n")

print(a,len)//打印a,b,c合并结果

return 0

}