杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5web
1 3 4
2 4 5
4 5 6数组
1 2 3
4 5 6
7 8 9svg
#include<stdio.h> #include<Windows.h> #pragma warning(disable:4996) #define N 3 int search(int a[N][N], int m, int n) { int key; printf("请输入要查找的数:\n"); scanf("%d", &key); int row = m - 1; int col = 0; while (col < n) { if (key < a[row][col]) { row--; } else if (key>a[row][col]) { col++; } else { return 1; } } return 0; } int main() { int arr[N][N] = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } }; printf("若是输出是1,则找到了,若是输出是0,表示没找到:\n%d\n", search(arr,N,N)); return 0; }