杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字)

题目要求时间复杂度小于O(N)

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网络空间、营销软件、网站建设、沧县网站维护、网站推广。

#include

int find(int arr[][3], int *px, int *py,int key)
{
    int x = 0;
    int y = *py - 1;
    while ((x < *px) && (y >= 0))
    {
        if (arr[x][y] == key)
        {
        //下标由指针带回
            *px = x;
            *py = y;
            return 0;
        }
        else if (arr[x][y] < key)
        {
            x++;
        }
        else
        {
            x++;
            y--;
        }
    }
    *px = -1;
    *py = -1;
}
void print_Arrs(int *arr,int row, int col)//输出函数(指针法)得益于c语言线性存储
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf("%d ", arr[i*col + j]);
        }
        printf("\n");
    }

}
int main()
{
    int n;
    int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    print_Arrs((int *)arr, 3, 3);
    int x = 3;
    int y = 3;
    printf("请输入需要查找的数字:\n");
    scanf("%d", &n);
    find(arr,&x,&y,n);
    if (x != -1 && y != -1)
    {
        printf("找到了,下标为%d,%d\n",x,y);
    }
    else
    {
        printf("没找到!\n");
    }
    return 0;
}

文章题目:杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字)
本文来源:http://scyanting.com/article/gdjioj.html