title:
在一个有序的二维数组中查找一个数(num)
(行:从左到右递增;列:从上到下递增)
thought:
1、选取数组中右上角的数字temp:
若temp == num 查找过程结束
若temp > num 剔除temp所在的列(此列中temp下面的数字都大于temp)
若temp < num 剔除temp所在的行(此列中temp左面的数字都小于temp)
在一个有序的二维数组中查找一个数(num)
(行:从左到右递增;列:从上到下递增)
thought:
1、选取数组中右上角的数字temp:
若temp == num 查找过程结束
若temp > num 剔除temp所在的列(此列中temp下面的数字都大于temp)
若temp < num 剔除temp所在的行(此列中temp左面的数字都小于temp)
2、每次比较都可以剔除一行或者一列
#include <iostream>
using namespace std;
bool find(int *,int ,int ,int ); //函数声明;
bool find(int *matrix,int row,int colum,int num)
{
bool found = false;
if(matrix != NULL && row > 0 && colum > 0)
{
int i = 0;
int j = colum-1;
while (i < row &&j >= 0)
{
if(matrix[i * colum+j] == num)
{
found = true;
break;
}
else if(matrix[i * colum+j] > num)
j = j-1; //右上角的数 > num 时,可将此数所在的列(由上到下递增)去掉(此列下面的数大于这一右上角的数)
else
i = i+1; //右上角的数 < num 时,可将此数所在的行(由左到右递增)去掉(此行前面的数小于这一右上角的数)
}
}
return found;
}
int main()
{
int two_matrix[4][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int *matrix = new int[16];
int k = 0;
for(int i = 0;i < 4 && k < 16;i++) //将二维数组转换为一维数组
for(int j = 0;j < 4 && k < 16;j++)
matrix[k++] = two_matrix[i][j];
int num;
cout << "输入要查找的数:";
cin >> num;
bool bl = find(matrix,4,4,num);
if(bl)
cout << num << "在数组中"<< endl;
else
cout << num << "在数组中不存在" << endl;
return 0;
}