两个数组并集 交集 差集的算法思想与实现

来源:互联网 发布:软件游戏制作学校 编辑:程序博客网 时间:2024/06/05 08:34

算法概述:

两个任意元素的数组,比较出两个数组中相同的元素和不同的元素。

 

元素划分:

计算过程中,两个数组内部元素的划分:

 



算法流程:

从数组1的尚未比较的元素中拿出第一个元素array1(i),用array1(i)与array2(j)进行比较(其中j>i且j<array2的长度),可能出现下面两种情况,

1.  数组2中找到了一个与array1(i)相等的元素,则将array2(j)与array2(i)进行交换,i加一,进行下次迭代

2.  数组2直到结尾也没找到与array1(i)相等的元素,则将array1(i)与尚未进行比较元素块的最后一个元素array1(k)进行交换,i不加一,进行下次迭代。

#include <iostream>using namespace std;//A-B:  [A[end]~A[nA])//B-A:  [B[end]~B[nB])//A&&B: A[0]~A[end-1] 或者(B[0]~B[end-1])//返回值end为交集与差集的分界线的索引位置。size_t SetOperating( int A[], size_t nA,int B[],size_t  nB){size_t end = nA;bool bFind = false;for (size_t i = 0;i < end;){bFind = false;size_t j = i;for ( ;j < nB; ++j){if(B[j] == A[i]){int val = B[j];B[j] = B[i];B[i] = val;bFind = true;break;}} if (bFind == false){if (j == nB){int val = A[end-1];A[end-1] = A[i];A[i] = val;--end;}}else++i;}return end;}int main(){int aa[] = {7,1,3,2,6,2,8,9};int bb[] = {10,1,2,3,6,2,9};SetOperating(aa,sizeof(aa)/4,bb,sizeof(bb)/4);}