在杨氏矩阵中查找一个数字是否存在

杨氏矩阵

有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的.

在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);

数组:

1  2  3       1  3  4       1  2  3

2  3  4       2  4  5       4  5  6

3  4  5       4  5  6       7  8  9

 1 #include<stdio.h>
 2 
 3 #define ROW 3
 4 #define COL 3
 5 
 6 int Find_num(int arr[ROW][COL],int num)
 7 {
 8     //从右上角开始查询
 9     int row = 0;
10     int col = COL - 1;
11     while (row < ROW && col<COL)
12     {
13         if (arr[row][col] > num)
14         {
15             //查询左边的数
16             --col;
17         }
18         if (arr[row][col] < num)
19         {
20             //查询下一行
21             ++row;
22         }
23         if (arr[row][col] == num)
24         {
25             break;
26         }
27     }
28     if (arr[row][col] == num)
29     {
30         return 1;
31     }
32     else
33     {
34         return 0;
35     }
36 }
37 
38 int main()
39 {
40     //要求时间复杂度小于=O(N),则可以利用杨氏矩阵的一些特性
41     //如果将每一个都数都查找一遍,则最长时间应该为O(row * col)
42     //如果利用每行从左到右是递增的,每列从上到下是递增的这一性质则为O(row + col)
43     int arr[ROW][COL] = { 1,2,3,3,4,5,4,5,6};
44     int num = 0;
45     while (1)
46     {
47         printf("请输入您要查找的数字:\n");
48         scanf("%d", &num);
49         int find_num = Find_num(arr, num);
50         if (find_num == 0)
51         {
52             printf("数字不存在!\n");
53         }
54         else
55         {
56             printf("数字存在!");
57         }
58 
59     }
60 
61     return 0;
62 }

猜你喜欢

转载自www.cnblogs.com/cuckoo-/p/10381190.html