采用归并排序算法查找两个字符串数组中的不同数据
来源:互联网 发布:黑人和小女孩网络对唱 编辑:程序博客网 时间:2024/06/09 17:16
现在项目中有需求比较两个字符串数组,找出其中不同的部分,并保存到本地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盘!");
这里是对归并排序算法的一个小应用,希望对大家有所帮助,不足之处请大家批评指正。 3 0
- 采用归并排序算法查找两个字符串数组中的不同数据
- 一些基本算法--归并两个数组,二分查找
- 比较出两个字符串数组中的不同的数据 并将其转化成为字符串
- 数组-采用二叉查找算法
- 归并排序中对小数组采用插入排序
- 两个已排序数组的归并
- 合并两个有序数组(归并排序)
- 算法学习-归并排序和二分查找
- 两个排序算法:快排+归并
- 快速排序算法在字符串数组排序中的应用
- 归并排序 (不采用哨兵) 算法导论2.3-2答案
- 查找两个字符串中的公共字符串
- 数组常用排序,查找算法
- Web_PHP_数组排序、查找算法;
- 数组归并排序算法的一种实现
- 算法题/两个数组排序
- 数组中的逆序对(归并排序)
- 归并排序求数组中的逆序对
- 测试
- 指针和引用的区别
- 自定计算金额
- 【转】lettuce介绍
- snack程序设计
- 采用归并排序算法查找两个字符串数组中的不同数据
- Linux远程使用图形界面
- power_saving导致的负载过高[已解决]
- Unity各种路径
- data factory快速生成大批量数据
- 函数篇之2——匿名函数
- C/Cpp指针
- 一个正则表达式测试(只可输入中文、字母和数字)
- MVC模式详解