1. 程式人生 > >楊氏矩陣(二維數組的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的數組中查找一個數字)

楊氏矩陣(二維數組的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的數組中查找一個數字)

row stdio.h 線性 數字 %d scan -- else if for

題目要求時間復雜度小於O(N)

#include<stdio.h>

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;
}

楊氏矩陣(二維數組的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的數組中查找一個數字)