小言_互联网的博客

将两个一维数组合并

262人阅读  评论(0)

对两个已排好序的一维数组进行合并并保持同样的排序规则
1. 实验目的
理解线性表的顺序表示和实现,并能灵活运用解决较复杂的问题。
2实验内容
已知两个整数顺序表是有序的, 将之合并为一个有序的顺序表。

这里假设两个已知数组分别为 LA=( 3, 5, 8, 11 ), LB=( 2, 6, 8, 9, 11, 15, 20 ), 并且都已按降序规则排好。

思路分析
首先需要找到一个更大的空间以能够容纳两个数组
如采用指针操作则可以用 malloc(), 或者 realloc()函数进行重新申请空间大小

/*malloc()函数使用*/
#include <stdlib.h>  //定义头文件
void *malloc(int size);  //函数声明

//使用方法
//例如分配100个存储空间
int *p;
p = (int *)malloc( sizeof(int) *100);

//详情请参照 (转载) https://blog.csdn.net/linan5231/article/details/50930630
/*  realloc()函数使用  */
#include <stdio.h>
void *realloc();

//使用方法
//例如将原来的100个空间变为200个
int *p;
p = (int *)realloc( sizeof(int) *200);

//详情请参照 (转载)https://blog.csdn.net/vevenlcf/article/details/47036127

这里没有采用指针化方式,直接重新申请一个能够容纳原来两个数组的新数组 list[11]
然后对新数组进行插入排序操作
关于插入排序,大家可以看插入排序介绍

下面是实现这道题的代码

#include <stdio.h>
int main()
{
	int i, j, temp;
	int list_a[4]={3,5,8,11}, list_b[7]={2,6,8,9,11,15,20};
	int list[11]={0};
	
	//输出原来的数组数据  并合并到一个新的更大的一维数组中 
	printf("The original order was:\n");
	printf("List A is: \n	");
	for(i=0;i<4;++i) 
	{
		list[i]=list_a[i];
		printf("%d  ",list[i]);
	}
	printf("\nList B is: \n	");
	for(i=4;i<11;++i)
	{
		list[i]=list_b[i-4];
		printf("%d  ",list[i]);
	}
	
	//对新的一维数组进行选择排序 
	for(i=1;i<11;++i)
	{
		temp=list[i];
		j=i-1;
		while(j>=0 && list[j]>temp)
		{
			list[j+1]=list[j];
			j=j-1;
		}
		list[j+1]=temp;
	}
	
	//将结果打印出来 
	printf("\n\n\nThe combined sort is:\n	");
	for(i=0;i<11;++i)
		printf("%d  ",list[i]);
	
	return 0;
}

当然这道题也可以采用归并排序,等写好了再贴出来
欢迎大家提供更好的见解


转载:https://blog.csdn.net/weixin_44895666/article/details/101036951
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场