六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 29|回复: 0

比较高效地实现从两个不同数组中提取相同部分组成新的数组(只支持Int类型) [C#]

[复制链接]

升级  48.67%

35

主题

35

主题

35

主题

秀才

Rank: 2

积分
123
 楼主| 发表于 2013-1-27 06:16:10 | 显示全部楼层 |阅读模式
        有时候我们需要从两个不同数组中提取出相同的部分的数组或者计算有多少个相同的项,这个算法刚好能派上用场,

实现方案:
1、将两个数组按从小到大排序;
2、遍历第一个数组 array1,跟第二个数组 array2 做比较;
3、如果找到相等的则提取出该数据并且记录下 array2 的下标到临时变量 t,下次循环则从 array2[t+1] 开始遍历 array2;
4、如果没有匹配到相等的而且 array2[t] 大于与 array1 对比的数据时, 记下 array2 当前下标到临时变量 t,下次循环则从 array2[t] 开始;
经过测试,该算法比“最笨”的作法无法在数组以何种方式排序都要强,如果量越多会越明显,有点可惜的是暂时只能使用在 Int[] 上,有时间再想一下其它数据类型的比较
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">获取两个整型数组中相等项的集合<span style="display: none;">
<!---->获取两个整型数组中相等项的集合#region  获取两个整型数组中相等项的集合

/**//// <summary>
/// 获取两个整型数组中相等项的集合
/// </summary>
/// <param name="array1"></param>
/// <param name="array2"></param>
/// <returns></returns>
public static int[] CompareEquation(int[] array1, int[] array2)
{
    
int i1, i2;
    
// 记录第二个数组上一次匹配到的位置
    int t = 0;
    
// 记录相同的项
    List<int> equal = new List<int>();

    
int[] sort1 = BubbleSort(array1);
    
int[] sort2 = BubbleSort(array2);

    
for (int i = 0; i < sort1.Length; i++)
    
{
        i1 
= sort1;

        
for (int j = t; j < sort2.Length; j++)
        
{
            i2 
= sort2[j];

            
if (i2 == i1)
            
{
                equal.Add(i2);
                
// 下次比较从下一位开始
                t = j + 1;
            }

            
else if (i2 > i1)
            
{
                
// 下次比较继续从这里开始
                t = j;
                
break;
            }

        }

    }


    
return equal.ToArray();
}


#endregion
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表