采用归并排序算法查找两个字符串数组中的不同数据

简介:   现在项目中有需求比较两个字符串数组,找出其中不同的部分,并保存到本地txt。实现方式每个人都有自己的思路,这里提供一种通过归并排序实现的方式供大家参考。

  现在项目中有需求比较两个字符串数组,找出其中不同的部分,并保存到本地txt。实现方式每个人都有自己的思路,这里提供一种通过归并排序实现的方式供大家参考。

  基本思路是数组A和数组B对比,使用数组a来保存数组A中比数组B中多的元素(即在A中存在,B中不存在的元素),b来保存数据B中比数组A中多的元素(即B中存在,A中不存在的元素)。开始需要分别调用Sort()函数对A、B数组进行排序,然后使用CompareTo从两个数组中第一个数组进行比较,当A.0(A中第一个元素)>B.0时A.CompareTo(B)==1,当A.0=B.0时A.CompareTo(B)==0,当A.0<B.0时A.CompareTo(B)==-1。通过判断A.CompareTo(B)的值来执行a.add和b.add操作,最终就能得到a、b数组,然后写入到txt就可以了。

  核心代码如下:

 /// <summary>
    /// 归并排序: 查找两个集合中的不同数据
    /// </summary>
    /// <param name="root">源数据集合</param>
    /// <param name="source">新数据集合</param>
    /// <param name="remove">需在源数据中移除的集合</param>
    /// <param name="add">需在源数据中添加的集合</param>
    public void FindDistinct(List<string> root, List<string> source, out List<string> remove, out List<string> add)
    {
        remove = new List<string>();
        add = new List<string>();

        root.Sort();
        source.Sort();
        //foreach (string str in root) Console.WriteLine(str);
        //Console.WriteLine("\r\n");
        //foreach (string str in source) Console.WriteLine(str);
        //Console.WriteLine("\r\n");

        int i = 0, j = 0;
        while (i < root.Count && j < source.Count)
        {
            switch (root[i].CompareTo(source[j]))
            {
                case -1:
                    remove.Add(root[i]); i++;
                    break;
                case 0:
                    i++; j++;
                    break;
                case 1:
                    add.Add(source[j]); j++;
                    break;
            }
        }

        if (i < root.Count)
        {
            for (int m = i; m < root.Count; m++) remove.Add(root[m]);
        }
        else if (j < source.Count)
        {
            for (int m = j; m < source.Count; m++) add.Add(source[m]);
        }

        //Console.WriteLine("\r\nroot中不同的数据:");
        //foreach (string str in remove) Console.WriteLine(str);

        //Console.WriteLine("\r\nsource中不同的数据:");
        //foreach (string str in add) Console.WriteLine(str);
    }
  调用:

        List<string> remove;
        List<string> add;
        FindDistinct(rpqlist, pdflist, out remove, out add);
        //将strArray输出到文本文件
        using (TextWriter tw = new StreamWriter(@"D:\RPQ.txt"))
        {
            int index = 0;
            foreach (string str in remove)
            {
                string s = string.Format("{0:d3}\t{1}", index, str);
                tw.WriteLine(s);
                index++;
            }
        }
        using (TextWriter tw = new StreamWriter(@"D:\PDF.txt"))
        {
            int index = 0;
            foreach (string str in add)
            {
                string s = string.Format("{0:d3}\t{1}", index, str);
                tw.WriteLine(s);
                index++;
            }
        }
        MessageBox.Show("数据对比完毕,文件已经保存到D盘!");
  这里是对归并排序算法的一个小应用,希望对大家有所帮助,不足之处请大家批评指正。


目录
相关文章
|
10天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
28 5
|
20天前
|
编解码 算法 图形学
同一路RTSP|RTMP流如何同时回调YUV和RGB数据实现渲染和算法分析
我们播放RTSP|RTMP流,如果需要同时做渲染和算法分析的话,特别是渲染在上层实现(比如Unity),算法是python这种情况,拉两路流,更耗费带宽和性能,拉一路流,同时回调YUV和RGB数据也可以,但是更灵活的是本文提到的按需转算法期望的RGB数据,然后做算法处理
|
1月前
|
算法 搜索推荐 Java
算法实战:手写归并排序,让复杂排序变简单!
归并排序是一种基于“分治法”的经典算法,通过递归分割和合并数组,实现O(n log n)的高效排序。本文将通过Java手写代码,详细讲解归并排序的原理及实现,帮助你快速掌握这一实用算法。
37 0
|
1月前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
1月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
27天前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
1月前
|
数据采集 搜索推荐 算法
【高手进阶】Java排序算法:从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用,让你的代码效率飙升!
【8月更文挑战第21天】Java排序算法是编程基础的重要部分,在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法,包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序,并提供了每种算法的Java实现示例。此外,还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用,帮助读者更好地理解和应用这些算法。
21 0
|
1月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
1月前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积
|
1月前
|
算法
【算法】前缀和——寻找数组的中心下标
【算法】前缀和——寻找数组的中心下标