1. 程式人生 > >學習演算法(3)——查詢2個數組中的相同元素

學習演算法(3)——查詢2個數組中的相同元素

這一篇,是在2個數組中,找相同的值。

假設,這兩個陣列已經排好序(升序),那麼只需要遍歷一次即可。

首先設兩個下標,分別初始化為兩個陣列的起始地址,依次向前推進。推進的規則是比較兩個陣列中的數字,小的那個陣列的下標向前推進一步,直到任何一個數組的下標到達陣列末尾時,如果這時還沒碰到相同的數字,說明陣列中沒有相同的數字。[1]

程式碼如下:

#include <QCoreApplication>
#include <iostream>
#include <map>
#include <set>

using namespace std;

bool findcommon2(int a[], int size1, int b[], int size2, vector<int> &vec)
{
     int i=0,j=0;

     while(i<size1 && j<size2) {
          if(a[i]==b[j]) {
            vec.push_back(a[i]);
            i++;
            j++;
          }

          if(a[i]>b[j])
               j++;

          if(a[i]<b[j])
               i++;
     }

     return false;
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int data[10] = {1,2,3,4,5,6,7,8,9,10};
    int rt[15] = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

    vector<int> vec;
    findcommon2(data, 10, rt, 15, vec);

    vector<int>::iterator it;
    it = vec.begin();

    for (;it != vec.end(); ++it) {
        cout << *it << endl;
    }
    return a.exec();
}

//


參考文獻:

[1] http://blog.csdn.net/lonelywinter340/article/details/3292843

---