在杨氏矩阵中查找某个数,找到了返回true,找不到返回false。

来源:互联网 发布:透明头像生成软件 编辑:程序博客网 时间:2024/05/18 02:33

杨氏矩阵的特点是它的行和列的数都是递增的,所以我们可以选择它的一个顶点元素作为比较对象。比如我在下面这个数组中查找数字2。
①把a[0][3]处的元素4和2比较,2<4,所以2肯定不在第3列(因为4是第三列最小的元素,下面的元素都比4大,自然都比2大),我们就把第三列排除。
②把a[0][2]处的元素3和2比较,2<3,所以2也肯定不在第2列,我们就再把第2列排除。
③把a[0][1]处的元素2和2比较,2==2,2找到了,查找结束。
这里写图片描述
②把a[0][2]处的元素3和2比较,2<3,所以2也肯定不在第2列,我们就再把第2列排除。
这里写图片描述

③把a[0][1]处的元素2和2比较,2==2,2找到了,查找结束。
这里写图片描述

如果查找的数是6,6>4,那么就把第0行排除(因为4是第0行最大的元素,6都比这行最大的元素大,那其他元素肯定是小于6的),然后开始从a[1][3]比较 ,以此类推,找不到就排除这一行,直到找到或者找不到为止。

bool Find(int* matrix, int rows, int columns, int number){    bool found = false; //先把found置为false    if (matrix != NULL && rows > 0 && columns > 0)//传过来的数组首地址必须有效并且数组大小要大于0    {        int row = 0;        int column = columns - 1;        while (row < rows && column >= 0)        {            if (matrix[row * columns + column] == number)//先比较坐标为(0,2)的元素,相等则found = true            {                found = true;                break;            }            else if (matrix[row * columns + column] > number)                --column;//如果大于要查找的数,排除这列            else                ++row;如果小于要查找的数,排除这一行        }    }    return found;}int main(){    int matrix[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };    int number = 5;    bool result = Find(matrix, 3, 3, number);    if (true == result)        printf("got it\n");    else        printf("Don't get it\n");    system("pause");    return 0;}

查找5,查找成功
这里写图片描述
.
.
.
查找10,查找失败
这里写图片描述

阅读全文
1 0
原创粉丝点击