欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

比較高效地實現從兩個不同數組中提取相同部分組

系統 1851 0

????????有時候我們需要從兩個不同數組中提取出相同的部分的數組或者計算有多少個相同的項,這個算法剛好能派上用場,

實現方案:
1、將兩個數組按從小到大排序;
2、遍歷第一個數組 array1,跟第二個數組 array2 做比較;
3、如果找到相等的則提取出該數據并且記錄下 array2 的下標到臨時變量 t,下次循環則從 array2[t+1] 開始遍歷 array2;
4、如果沒有匹配到相等的而且 array2[t] 大于與 array1 對比的數據時, 記下 array2 當前下標到臨時變量 t,下次循環則從 array2[t] 開始;

經過測試,該算法比“最笨”的作法無法在數組以何種方式排序都要強,如果量越多會越明顯,有點可惜的是暫時只能使用在 Int[] 上,有時間再想一下其它數據類型的比較

獲取兩個整型數組中相等項的集合
<!----> 獲取兩個整型數組中相等項的集合 #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[i];

????????
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

冒泡法排序(非原創)
<!----> 冒泡法排序(非原創) #region ?冒泡法排序(非原創)

/**/ /// ? <summary>
/// ?冒泡法排序
/// ? </summary>
/// ? <returns> 排序結果:?從小到大(升序) </returns>
/// ? <see?cref="http://www.aspcool.com/lanmu/browse1.asp?ID=1223&bbsuser=csharp"/>

public ? static ? int []?BubbleSort( int []?R)
{
????
int ?i,?j,?temp;
????
// 交換標志?
???? bool ?exchange;
????
// 最多做R.Length-1趟排序?
???? for ?(i? = ? 0 ;?i? < ?R.Length;?i ++ )
????
{
????????
// 本趟排序開始前,交換標志應為假?
????????exchange? = ? false ;
????????
for ?(j? = ?R.Length? - ? 2 ;?j? >= ?i;?j -- )
????????
{
????????????
// 交換條件?
???????????? if ?(R[j? + ? 1 ]? < ?R[j])
????????????
{
????????????????temp?
= ?R[j? + ? 1 ];
????????????????R[j?
+ ? 1 ]? = ?R[j];
????????????????R[j]?
= ?temp;
????????????????
// 發生了交換,故將交換標志置為真?
????????????????exchange? = ? true ;
????????????}

????????}

????????
// 本趟排序未發生交換,提前終止算法?
???????? if ?( ! exchange)
????????
{
????????????
break ;
????????}

????}


????
return ?R;
}


#endregion

測試結果:



所謂的最笨的方法:

自我感覺最笨的作法
<!----> 計算兩個整型數組中數值相等的數量(最笨的方法) #region ?計算兩個整型數組中數值相等的數量(最笨的方法)

/**/ /// ? <summary>
/// ?計算兩個整型數組中數值相等的數量(最笨的方法)
/// ? </summary>
/// ? <param?name="array1"></param>
/// ? <param?name="array2"></param>
/// ? <returns></returns>

public ? static ? int []?CompareEquation1( int []?array1,? int []?array2)
{
????List
< int > ?equal? = ? new ?List < int > ();

????
foreach ?( int ?i1? in ?array1)
????
{
????????
foreach ?( int ?i2? in ?array2)
????????
{
????????????
if ?(i1? == ?i2)
????????????
{
????????????????equal.Add(i1);
????????????}

????????}

????}

????
return ?equal.ToArray();
}


#endregion

從圖中可以看到運行效率有了很大的提升,
以上只是不成熟的解決方案,歡迎各位一起來討論!

相關代碼下載

比較高效地實現從兩個不同數組中提取相同部分組成新的數組(只支持Int類型) [C#]


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩精品视频一区二区三区 | 久久精品国产免费 | 亚洲国产第一区 | 鲁丝片一区二区三区毛片 | 欧美午夜不卡 | 欧美视频www | 国产精品乱码一区二三区小蝌蚪 | 精品国产福利在线 | 日本一区二区三区高清不卡 | 在线观看视频一区 | 欧美日本国产VA高清CABAL | 免费精品美女久久久久久久久久 | 国产精品亚洲精品青青青 | 日韩精品成人 | 毛片一区二区三区四区 | 第一页在线视频 | 精品欧美乱码久久久久久 | 日韩在线国产 | 成人激情视频在线观看 | 欧美1024性视频 | ab毛片 | 天天射天天操天天 | 久久精品视频99 | 九九色网站 | 日韩欧美中文字幕视频 | 亚洲激情视频网 | 亚洲第一男人天堂 | 国产精品久久久久久久久久久久 | 日韩国产欧美视频 | 亚州毛色毛片免费观看 | 午夜手机电影 | 天天操婷婷 | 亚洲我不卡 | 国内精品视频 在线播放 | 国产精品美女久久久久久免费 | 成人日韩在线 | 久草视频在线播放 | 日韩国产精品一区二区三区 | 国产毛片a精品毛 | 天天摸天天碰成人免费视频 | 无码日韩精品一区二区免费 |