标签:c++
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。6 8 11 15
方法一:二维数组相当于多个一维行数组,用折半查找查找每行
//折半查找v[0]<v[1]<....<v[n] bool binsearch(int v[], int n, int x) { //下标 int low,mid,high; low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if (x>v[mid]) { low=mid+1; } else if (x<v[mid]) { high=mid-1; } else {//找到 return true; } } //没找到 return false; }方法二:找规律
// 二维数组matrix中,每一行都从左到右递增排序, // 每一列都从上到下递增排序 bool Find(int *matrix, int rows, int columns, int x) { bool found=false; if (matrix==NULL||rows<=0||columns<=0) { return false; } int row=0; int column=columns-1; while(row<rows&&column>=0) { if (x==matrix[row*columns+column]) { found=true; break; } else if (x>matrix[row*columns+column]) { row++; } else { column--; } } return found; }
//头文件 #include <iostream> #include <string> using namespace std; //测试用例 void main() { int i=0; bool flag=false; int findx=9; int a[4][4]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; //方法一 for (i=0; i<4; i++) { if (binsearch(a[i],4,findx)) { flag=true; break; } } if (flag) cout<<"法一:found"<<endl; else cout<<"法一:do not found"<<endl; //方法二 if(Find(&a[0][0],4,4,findx)) cout<<"法二:found"<<endl; else cout<<"法二:do not found"<<endl; }
标签:c++
原文地址:http://blog.csdn.net/lsh_2013/article/details/45192937