1 #include <stdio.h>
2
3 /*
4 题目:在二维数组中,每一行从左到右,递增;
5 每一列从上到下递增。完成一个函数。
6 输入一个二维数组和一个整数,判断该数组中是否存在这个整数。
7
8 测试数据
9 1 2 8 9
10 2 4 9 12
11 4 7 10 13
12 6 8 11 15
13 查找 7 是否存在其中。
14
15 解题思路:
16 从右上顶点开始于判断,与数字7做对比,看是否与7相同。如果相同就是在其中。
17 如果不在,判断该数字是否大于要查找数字7,如果大于就证明可以去掉9所在的数字那一列。
18 因为,数组符合水平向右不断增大,垂直向下不断增加。如果小于查找数字7,就可以舍弃水平哪一行。
19 根据这个规则,循环查找,直到结束。
20 --------------------
21 第一次查找后:9 》7舍弃列
22 1 2 8
23 2 4 9
24 4 7 10
25 6 8 11
26
27 --------------------
28
29 --------------------
30 第二次查找后:8 》7舍弃列
31 1 2
32 2 4
33 4 7
34 6 8
35
36 --------------------
37 --------------------
38 第三次查找后:2 《 7 舍弃行
39
40 2 4
41 4 7
42 6 8
43
44 --------------------
45 --------------------
46 第4次查找后:4 《 7 舍弃行
47
48 4 7
49 6 8
50
51 --------------------
52 --------------------
53 第5次查找后: 7 = 7 存在
54
55 4 7
56 6 8
57
58 --------------------
59
60 */
61
62 /*
63 时间:2015-6-27
64 name:hugo
65 e-mail: hgonlywj@gmail.com
66
67 函数功能:查找有序二维数组的元素,
68
69 */
70
71 int findNumFun(int *matrix, int findNum, int rows, int columns)
72 {
73
74 if (rows < 0 || columns < 0 || matrix == NULL)
75 {
76 return -1;
77 }
78
79 int column = columns - 1;
80 int row = 0;
81
82
83 while (row < rows && column > 0)
84 {
85 if (findNum == matrix[row * columns + column])
86 {
87 printf("row : %d, column: %d.\n", row, column);
88 return 1;
89 }
90 else if (findNum > matrix[row * columns + column])
91 {
92 row++;
93 }
94 else
95 {
96 column--;
97 }
98
99 }
100
101
102 return 0;
103 }
104
105
106 int main()
107 {
108 printf("FIndInPartiallySortedMatrix.c\n");
109
110 int testArray[] = {1,2,8,9,2,4,9,12,4,7,10,12,6,8,11,15};
111
112 int findNum = 10;
113
114 findNumFun(testArray, findNum, 4, 4);
115
116
117 return 0;
118 }