对两个已排好序的一维数组进行合并并保持同样的排序规则
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
查看评论