这个也是笔试或者面试过程中经常遇到的一个问题,利用二分查找的思想,巧妙的查找目标元素,网上资料也比较多,自己只是做一个收藏,贴一个code
/*
杨氏矩阵查找
*/
#include <iostream>
using namespace std;
//二维数组的使用是一个问题
void fun(int array[][100],int n,int m,int key,
int &i,int &j)
{
i=0,j=m-1;
// int temp = array[i][j];
while(key != array[i][j]&&
(i+j) !=0 && (i+j)!=(m+n)
&& i>=0 && i<=n
&& j>=0 && j<=m )
{
if(array[i][j] < key)
i++;
if(array[i][j] > key)
j--;
}
}
int main()
{
int array[100][100];
int n,m;
while(cin >>n >> m
&&(n+m) != 0)
{
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
cin >> array[i][j];
int i=0,j=0;
int key=0;
cin >> key;
fun(array,n,m,key,i,j);
if(array[i][j] != key) //处理回到顶点,元素不存在的情况
cout << "no this number" <<endl;
else
cout << "the localion of this number is " \
<< i+1 <<" " <<j+1 << endl;
}
}