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 }
原文:http://www.cnblogs.com/hgonlywj/p/4842535.html