找出两个已排序列表中的所有相同元素

题目:
在这里插入图片描述
步骤:

1) i := 0,  j := 0
2) if i>=alen || j>=blen
		return
3) if a[i] == b[j]
		i++, j++
		goto 2)
4) if a[i] < b[j]
		i++
		goto 2)
5) if b[j] < a[i]
		j++
		goto 2)	

共需比较max(列表1长度,列表2长度)次。

c实现:

#include <stdio.h>
void fun_same(const int * a, int alen, const int * b, int blen)
{
	int i=0,j=0;
l:	if(i>=alen || j>=blen)
	{
		printf("\n");
		return;
	}
	if(a[i]==b[j])
	{
		printf("%d ", a[i]);
		i++;j++;goto l;
	}
	if(a[i]<b[j])
	{
		i++; goto l;
	}
	if(a[i]>b[j])
	{
		j++; goto l;
	}
}
int main()
{
	int a[]={2,5,5,5};
	int b[]={2,2,3,5,5,7};
	fun_same(a,sizeof(a)/sizeof(int), b, sizeof(b)/sizeof(int));
	return 0;
}
posted @ 2022-04-19 18:17  enbug  阅读(56)  评论(0编辑  收藏  举报