利用快速排序求两集合交集

1.主程序
%% 求两个集合快速排序
tic
arrayList1 = [49,38,65,97,76,13,27,49,100,67];
arrayList1 = quickSort(arrayList1,1,length(arrayList1));
arrayList2 = [49,34,76,27,23,566,67];
arrayList2 = quickSort(arrayList2,1,length(arrayList2));

%% 求两个集合交集;
length_arrayList1 = length(arrayList1);
length_arrayList2 = length(arrayList2);
union = [];
i = 1;
j = 1;
while true
    if i < length_arrayList1 && j < length_arrayList2
        if arrayList1(i) < arrayList2(j)
            i = i + 1;
        elseif arrayList1(i) > arrayList2(j)
            j = j + 1;
        else
            union = [union,arrayList1(i)];
            i = i + 1;
            j = j + 1;
        end
    else
        break;
    end
end
toc
快速排序函数
function  arrayList = quickSort(arrayList,low,high)
% pivotpos = 1;
if (low < high)
    [pivotpos,arrayList] = partition(arrayList,low,high);
    arrayList  = quickSort(arrayList,low,pivotpos - 1);
    arrayList  = quickSort(arrayList,pivotpos + 1,high);
end
end
划分函数;
function [low,new_arrayList] = partition(arrayList,low,high)
if nargin == 1
    low = 1;
    high = length(arrayList);
end
pivot = arrayList(low);             %用区间第1个记录做基准;
while low < high                    %从区间两段交替向中间扫描,直至low =hing
    while low <high && arrayList(high) >= pivot
        high = high - 1;
    end
    if low < high                        %表示找到arrayList[hihg]< pivot;
        temp = arrayList(low);
        arrayList(low) = arrayList(high);
        arrayList(high) = temp;
        low = low + 1;
    end
    while low < high && arrayList(low) <= pivot
        low = low + 1;
    end
    if low < high
        temp = arrayList(high);
        arrayList(high) = arrayList(low);
        arrayList(low) = temp;
        high = high -1;
    end
end
new_arrayList = arrayList;
end

求指教有什么速度更快的方法求解集合交集。。

时间: 2024-08-12 13:04:38

利用快速排序求两集合交集的相关文章

数据结构实践——“求两集合交集”的一个错解分析

本文点评一位学生对基于线性表存储集合,然后对集合进行求并运算的错解,供学习者參考. [项目 - 求集合并集] 如果有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员.设计算法.用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B.即将两个集合的并集放在线性表LC中. 提示: (1)除了实现unnionList函数外.还须要在main函数中设计代码,调用unionList进行測试

利用递归求两个数字的最大公约数。

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //利用递归求两个数字的最大公约数. //公因数,如果一个整数同时是几个整数的约数,则这个整数为它们的"公约数" function getNum(a, b) { va

php求两数组交集的三种方法

题目: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1],nums2 = [2,2]输出: [2]示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明: 输出结果中的每个元素一定是唯一的. 我们可以不考虑输出结果的顺序. 解法一:迭代一个数组 思路分析: 迭代一个数组,判断是否存在另外一个数组 PHP 代码实现: /** * @param Integer[] $nums1 * @pa

利用随机数 求两数相减不退位

static void Main(string[] args)        {            while (true)            { int a, b, c,m,n;                Random r = new Random();  //主要的就是三位数的百分位最大不会同时取到四位数的百分位,也就是说c永远小于b;                a = r.Next(1,10);                b=r.Next(2, 10);        

利用 set_symmetric_difference 求两个 vector 中不同的所有元素

这个问题原本是 C++ 吧里有人问的, 我当时就立刻动手解决了, 结果后来才发现, STL 里已经有了对应的泛型算法了...... 看来我对 STL 知道的还是太少, 贴一下我当时完成的方法: set<int> VecToSet (const vector<int> &vec) { set<int> tmp_set (vec.cbegin (), vec.cend ()); return move (tmp_set); } void EraseSameNum (

求两个集合的交集和并集C#

我是用hashset<T>来实现的 具体如代码所示 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiaoJi { class Program { static void Main(string[] args) { int [] arrA=new int[8]{1,2,3,4,5,6,7,8}; int [] arrB=new int[5]{4,5,

A、B两个整数集合,设计一个算法求他们的交集

代码留作记录,本人水平有限,看了别人的解法真是自愧不如. 关于此题的详细探讨可以参考:http://blog.csdn.net/thebestdavid/article/details/12056293 /*A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效.*/ #include <iostream> #include <cstring> #include <set> #define M 8 #define N 5 using namespace std; i

利用sort和uniq求两个文件的并集,交集和差集

利用sort和uniq求两个文件的并集,交集和差集 并集:cat file1.txt file2.txt | sort | uniq > file.txt 交集:cat file1.txt file2.txt | sort | uniq -d >file.txt 差集:求file1.txt相对于file2.txt的差集,可先求出两者的交集file3.txt,然后在file1.txt中除去file3.txt即可. cat file1.txt file2.txt | sort | uniq -d

java判断两集合是否相同以及求取交集,并集,差集

业务中用时需要判断两集合是否相同,所有提供一个工具方法,使用set集合的特性(元素唯一): private Map<String,Set<Integer>> getCategoryApiId(Set<Integer> oldAuthSet , Set<Integer> newAuthSet){ Map<String,Set<Integer>> categoryApiId = new HashMap(); if (oldAuthSet!