顺序表的合并(C#)

算法:将两个顺序表合并成一个顺序表

要求:

//把两个无序表合成一个有序表
//例如:把la和lb合成lc。
	la:1,5,2,3,9
	lb:6,8,4,7
	lc:1,2,3,4,5,6,7,8,9

我的做法:

1.设两个无序表为la和lb,因为顺序表是无序的,而且顺序表难以直接排序,所以我先把la和lb弄成数组a和数组b,因为数组排序十分容易,可以直接采用内置的Array.Sort()方法直接排出来。
2.再把排好的数组写入另外两个新顺序表la2和lb2,这样它们就是两个有序表了。
3.合并利用循环来搞定:
(1)两表都有值的情况下,将两表的第一个值相比较,将控制循环的变量i,j设为0;小的值插入lc并使该表对应的变量自增。
(2)表la2元素用完,直接在表lc后插入lb2的全部元素。
(3)表lb2元素用完,直接在表lc后插入la2的全部元素。
4*.其实还有一种思路就是先把两个无序表随便合成一个无序表,然后再转成数组,再重排序,再把数组插入顺序表中,这个思路可能更简单一点,这里就不再展示代码了。

算法的代码如下(c#):
注:过程中用到了顺序表的取值(GetE)和插入(Insert)方法,由于比较基础,故在此不再给出。

public void Merge(Sqlist la,Sqlist lb)
{
	int []a=new int[la.length];
	for(int m=0; m<la.length; m++)
		a[m]=Convert.ToInt32(la.GetE(m+1));
		
	int []b=new int[lb.length];
	for(int m=0; m<lb.length; m++)
		b[m]=Convert.ToInt32(lb.GetE(m+1));
	
	Array.Sort(a);
	Array.Sort(b);

	Sqlist la2;
	Sqlist lb2;
	
	for(int m=1; m<a.length+1; m++)
		la2.Insert(m, a[m-1]);
	for(int m=1; m<b.length+1; m++)
		lb2.Insert(m, b[m-1]);

	int i=0;int j=0;int k=0;
	while (i < la2.length && j < lb2.length)
	{
 		if (Convert.ToInt32(la2.Elements[i]) <= Convert.ToInt32(lb2.Elements[j]))
   			this.Insert(k++, la2.Elements[i++]);
 		else
 			this.Insert(k++, lb2.Elements[j++]);
	}
	while (j < lb2.length)
		this.Insert(k++, lb2.Elements[j++]);
	while (i < la2.length)
		this.Insert(k++, la2.Elements[i++]);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值