下面的是采用一种交换的方式来求出两个数组的并集,交集和差集,这种算法运算速度较快,内存消耗空间较少,是一个值得学习的好方法,另外,重要的不是算法本身,而是该算法会开拓我们的思维空间,要注意对问题的多思考。

算法概述:

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

元素划分:

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

算法流程:

从数组1的尚未比较的元素中拿出第一个元素array1(i),用array1(i)与array2(j)进行比较(其中j>i且j

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

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

算法实现代码:

#include

using std::cout;

using std::cin;

using std::endl;

void main()

{

//定义两个数组

int array1[] = {7,1,2,5,4,3,5,6,3,4,5,6,7,3,2,5,6,6};

int size1 = 18;

int array2[] = {8,2,1,3,4,5,3,2,4,5,3,2,1,3,5,4,6,9};

int size2 = 18;

int end = size1;

bool swap = false;//标识变量,表示两种情况中的哪一种

for(int i=0 ; i < end;)

{

swap = false;//开始假设是第一种情况

for(int j=i ; j < size2;

j++)//找到与该元素存在相同的元素,将这个相同的元素交换到与该元素相同下标的位置上

{

if(array1[i] == array2[j])//第二种情况,找到了相等的元素

{

int tmp = array2[i];//对数组2进行交换

array2[i] = array2[j];

array2[j] = tmp;

swap = true;//设置标志

break;

}

}

if(swap != true)//第一种情况,没有相同元素存在时,将这个元素交换到尚未进行比较的尾部

{

int tmp = array1[i];

array1[i] = array1[--end];

array1[end] = tmp;

}

else

i++;

}

//结果就是在end表示之前的元素都找到了匹配,而end元素之后的元素都未被匹配

//先输出差集

cout<

for(i = end ; i < size1; i++)

{

cout<

}

cout<

cout<

for(i = end ; i < size2; i++)

{

cout<

}

cout<

//输出交集

cout<

for(i = 0 ; i

{

cout<

}

cout<

//输出并集

cout<

for(i = 0 ; i

{

cout<

}

for(i = end ; i < size1; i++)

{

cout<

}

for(i = end ; i < size2; i++)

{

cout<

}

cout<

}

输出结果如下:

only in array1

7 6 5 6 6 7

only in array2

1 3 2 4 8 9

elements in array1 and array2

6 1 2 5 4 3 5 5 3 4 2 3

elements in array1 or array2

6 1 2 5 4 3 5 5 3 4 2 3 7 6 5 6 6 7 1 3 2 4 8 9

Press any key to continue

用c 语言实现数组的并集,C++实现两个数组的并集,交集相关推荐

  1. c语言怎么把两个数组连接到一起,连接两个数组的方法

    可以直接连接的叫链表 数组是顺序存储的,只能先声明一个新数组,容量是那两个数组的容量和. Labview 怎么连接两个不同维度的数组啊的? 对于可变数组长度,有个方法是先建一个空数组,然后利用Buil ...

  2. java数组的扩容,将两个数组合并成一个数组

    java数组的扩容,将两个数组合并成一个数组 //将下列两个数组合成一个数组 public class Test04 {public static void main(String[] args) { ...

  3. java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)

    示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...

  4. matlab合并有序数组,《数组合并》JS合并两个数组的3种方法详解

    这篇文章主要介绍了JS合并两个数组的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个包解决你所有的JS问题,点击获取 需要将两个数组 ...

  5. java 两个等长数组的中位数_查询两个数组的中位数

    查询两个数组的中位数 Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m and n r ...

  6. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...

    此类实现: 输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组. 并交换两个子数组的位置,保持子数组中的元素序号不变. 如:原数组为7,9,8,5,3,2 以下标3为分割点, ...

  7. php 判断两个数组差集,php array_udiff_assoc 计算两个数组的差集实例

    php array_udiff() 函数用于比较两个(或更多个)数组的键名和键值,并返回差集.此比较是通过用户提供的回调函数来进行的.如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小 ...

  8. scala 数组合并_Scala程序合并两个数组或数组缓冲区

    scala 数组合并 Scala | 合并两个数组 (Scala | Merging two arrays) Arrays are important data structures in progr ...

  9. some数组遍历的用法/得到两组数组对象中某属性相同or不同的对象/对比两组数组中, 对象的某个值重复

    很早就知道some方法, 最近需求需要排查两组数组中有相同id的对象和不同id的对象, 实际运用到了some的妙用~ 首先举例我的需求如下(得到id相同和id不同的数据): const aa = [{ ...

最新文章

  1. 【vs开发】向图形界面程序添加控制台
  2. ExtJS ComboBox 异步读取项后默认选中某项
  3. 什么是你的职涯“本钱”
  4. swift5的代理的使用
  5. assets bitmap 转_图片文件和Bitmap之间的转换
  6. Intellij IDE 必知配置
  7. java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
  8. urllib2的用法
  9. 时间管理术第一原则总结
  10. linux 目前运行的服务,Linux系统服务
  11. 二进制部署Kubernetes v1.13.4 HA可选
  12. java线程死锁研究
  13. 资深制作人谈游戏策划如何入行
  14. 神通数据库常用命令行
  15. ETERM操作和错误集合
  16. 论文精读——基于演化动力学的复杂网络中带阈值雪堆博弈模型研究
  17. iPhone怎么设置闹钟铃声?苹果手机自定义闹钟铃声教程
  18. 记TUP对话大师系列之-Jeffery Richter
  19. 如何在matlab中表达点集,matlab练习程序(点集配准的SVD法)
  20. linux 系统安装aria2以及配置web端

热门文章

  1. 微信商城系统开发具体流程
  2. Java项目一 家庭记账软件
  3. linux中继器设置密码,无线扩展器管理员密码_初始密码是多少?-192路由网
  4. Arduino Uno + APDS9930 实现手势控制LED灯亮灭、调光等
  5. G16、G24、G32、G36、G60
  6. MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)
  7. Linux —— 所有者(user)群组(Group)其他人(others)
  8. 死锁的定义和产生条件以及如何避免死锁
  9. docker学习笔记(k8s云原生学习前瞻)
  10. python识别图片中的物体_python3+opencv3识别图片中的物体并截取的方法