求数组交集
思路:
1.先将两个数组按从小到大排序
2.一个一个比较数组元素的大小,小的——数组下标自加;相等——将其中任何一个移入交集数组,两个数组下标都自加。重复操作
3.只有两个数组的下标在自加过程中同时不超出数组长度才循环,只要有一个数组的下标超出数组长度,循环就结束
代码实现:
#include<stdio.h>
void Insert_order(int a[],int n) //插入排序
{
int i,j;
int key;
for (i=1;i<n;i++)
{
key = a[i];
for (j=i-1;j>=0;j--)
{
if (a[j]>key)
a[j+1] = a[j];
else
break;
}
a[j+1] = key;
}
}
int main()
{
int array1[]={1,2,5,3,6};
int array2[]={5,4,1};
int array12[10]; //用于装并集元素
int i,k = 0;
Insert_order(array1,5); //先对两个数组排序
Insert_order(array2,3);
int a1 = 0,a2 = 0; //a1表示数组array1的下标;a2表示数组array2的下标
while (a1<5 && a2<3) //下标同时不越界才循环
{
if (array1[a1] == array2[a2]) //相等只需将其中一个移入交集数组中
{
array12[k++] = array1[a1];
a1++; //下标同时自加
a2++;
}
else if (array1[a1] > array2[a2]) //小的数组下标自加
a2++;
else
a1++;
}
for (i=0;i<k;i++)
printf("%3d",array12[i]);
printf("\n");
return 0;
}