原题:已知一个矩阵 A(m*n) 的元素每行每列都按从小到大有序, 试设计一个算法判断任一给定值 k 是否在矩阵 A(m*n) 中, 如 k 在矩阵 A(m*n) 中, 则返回其所在行号和列号, 要求比较次数不大于 m+n 次.
分析:可用 j 表示要查找的元素的列号, 先在第一行中从右到左依次进行比较找出第一次出现 A(0, j) <= x, 的元素, 如果 A(0, j) == x, 则查找成功; 否则在第 j 列中查找.
#include<iostream>
#include<time.h>
#include<iomanip>
#define M 9
#define N 5
#define ElemType int
using namespace std;
enum Status{TRUE, FALSE};
int CreateArray(ElemType a[N][N])
{//生成每行每列都按从小到大有序的二维数组
int i, j, n = 1;
srand((unsigned)time(NULL));
for(i = 0; i < M; i++)
{
for(j = 0; j < N; j++)
{
a[i][j]= n++;
cout.width(4);
cout<<a[i][j]<<" ";
}
cout<<endl<<endl;
}
cout<<endl<<e