杨氏矩阵中是否包含k

//杨氏矩阵查找k是否存在 时间复杂数小于O(N),O(N)为穷举法用的时间
int FindNum1(int(*arr)[3], int k, int row, int col)
{
    int i = 0;
    int j = col - 1;
    while(i < row && j > 0)
    {
        if (arr[i][j] < k)
        {
            i++;
        }
        else if (arr[i][j] > k)
        {
            j--;
        }
        else
        {
            return 1;
        }
    }
    //找不到
    return 0;
}

int FindNum2(int arr[3][3], int k, int *row, int *col)
{
    int x = 0;
    int y = *col - 1;
    while(x <= *row-1 && y >= 0)
    {
        if (arr[x][y] < k)//i行右上角最大值小于k 换下一行
        {
            x++;
        }
        else if (arr[x][y] > k)//i行右上角最大值大于k 换上一列
        {
            y--;
        }
        else
        {
            //操作x,y的值
            *row = x;
            *col = y;
            return 1;
        }
    }
    //找不到
    return 0;
}

int main()
{
    int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
    int k = 5;
    int x = 3;
    int y = 3;//返回型参数
    //int ret = FindNum1(arr, k, 3, 3);
    int ret = FindNum2(arr, k, &x, &y);

    if (ret == 1)
    {
        printf("包含,下坐标是arr[%d][%d]\n", x, y);
    }
    else
    {
        printf("不包含");
    }

    return 0;
}

你可能感兴趣的:(算法,数据结构,数学建模)