我想在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";
答案 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