如何在二维数组中使用二进制搜索?

时间:2012-04-27 05:18:46

标签: c++ arrays data-structures binary-search quicksort

我想在C ++中比较2,二维数组(某些特定元素)arr1[][]arr[][],我使用for循环来比较它们但是花了很长时间。

我可以使用搜索算法来实现二进制搜索或快速搜索吗?我该如何实现呢?

到目前为止,这是我的代码:

for (k = 0; k < MAXROW; k++)
{  
  for (m = 0; m <  MAXROW; m++)
   {
     for(j=0;j<MAXCOL;j++)
     {
        if(arr[k][3] ==arr1[m][3]) 
        {
          if((arr[k][1] ==arr1[m][1] && arr[k][2] ==arr1[m][2]))
          {
             cout<<" \n same element";
          }
          else
             cout<<"\n inner  different elements";
        }
        else
           cout<<"\n different elements";

3 个答案:

答案 0 :(得分:4)

判断两个二维数组是否相等(不了解其组织)的唯一方法是比较每个元素。这应该有O(mn)运行时间,其中m =行数和n =列数。你似乎写了一个额外的循环,这可能是你认为它运行得太慢的原因。这是我写比较的方式:

bool are_equal = true;
for (int i = 0; i < MAX_ROWS; ++i) {
  for (int j = 0; j < MAX_COLS; ++j) {
    if (arr1[i][j] != arr2[i][j]) {
      are_equal = false;
      break;
    }
  }
}
if (are_equal) {
  std::cout << "The arrays are equal." << std::endl;
} else {
  std::cout << "The arrays differ by at least one element." << std::endl;
}

仅比较第3列和第4列(或列的任何子集):

int columns_to_check[] = {2, 3}; // Remember that these are 0-indexed
const int NUM_COLS = sizeof(columns_to_check)/sizeof(int);

bool are_equal = true;
for (int i = 0; i < MAX_ROWS; ++i) {
  for (int j = 0; j < NUM_COLS; ++j) {
    int col = columns_to_check[j];
    if (arr1[i][col] != arr2[i][col]) {
      are_equal = false;
      break;
    }
  }
}
if (are_equal) {
  std::cout << "The arrays are equal." << std::endl;
} else {
  std::cout << "The arrays differ by at least one element." << std::endl;
}

答案 1 :(得分:2)

如果你只想比较第3和第4列,你可以只使用一个循环。

bool are_equal = true;
for (int i = 0; i < MAX_ROWS; ++i) {
  if (arr1[i][2] != arr2[i][2]  || arr1[i][3] != arr2[i][3]) {       
     are_equal = false;
     break;
  }      
}

答案 2 :(得分:0)

不,你不能使用二进制搜索。您必须使用2个循环并逐个元素地比较数组。大多数搜索算法(包括二进制搜索)都使用密钥来搜索数组。数组是2D还是1D