码迷,mamicode.com
首页 > 编程语言 > 详细

练习题-二维数组中的查找

时间:2015-08-31 19:06:17      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

《剑指offer》中的一个题目:

在一个二位数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

例如,下面的二位数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含该数字,则返回false。

    int matrix[] = {
        1, 2,  8,  9,
        2, 4,  9, 12,
        4, 7, 10, 13,
        6, 8, 11, 15
    };

代码:

 1 #include <stdio.h>
 2 /*
 3  * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
 4  * 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入
 5  * 这样一个二维数组和一个整数,判断数组中是否含有该整数。
 6  * rows   : 行数
 7  * comumns: 列数
 8  */
 9 int find_matrix_0(int *matrix, int rows, int columns, int number)
10 {
11     int found = -1;
12 
13     // 从右上角开始查找
14     int row = 0;
15     int column = columns - 1;
16 
17     while(row < rows && column >= 0)
18     {
19         if(matrix[row * columns + column] == number)
20         {
21             found = row * columns + column;
22             break;
23         }
24         else if(matrix[row * columns + column] > number)
25         {
26             // 如果当前值比查找值大,则当前的一整列都比查找值大,从而跳过当前列 
27             column--;
28         }
29         else
30         {
31             // 如果当前值比查找值小,则当前的一整行都比查找值小,从而跳过当前行
32             row++;
33         }
34     }
35 
36     return found;
37 }
38 
39 int find_matrix_1(int *matrix, int rows, int columns, int number)
40 {
41     int found = -1;
42 
43     // 从左下角开始查找
44     int row    = rows - 1;
45     int column = 0;
46     while(row >= 0 && column < columns)
47     {
48         if(matrix[row * columns + column] == number)
49         {
50             found = row * columns + column;
51             break;
52         }
53         else if(matrix[row * columns + column] > number)
54         {
55             // 如果当前值比查找值大,则当前一整行都比查找值大,从而跳过当前行
56             row--; 
57         }
58         else
59         {
60             // 如果当前值比查找值小,则当前一整列都比查找值小,从而跳过当前列
61             column++; 
62         }
63     }
64 
65     return found;
66 }
67 
68 int main(void)
69 {
70     int matrix[] = {
71         1, 2,  8,  9,
72         2, 4,  9, 12,
73         4, 7, 10, 13,
74         6, 8, 11, 15
75     };
76     int found;
77 
78     found = find_matrix_0(matrix, 4, 4, 7);
79     printf("find_matrix_0 : %d\n", found);
80 
81     found = find_matrix_1(matrix, 4, 4, 7);
82     printf("find_matrix_1 : %d\n", found);
83 
84     return 0;
85 }

 

练习题-二维数组中的查找

标签:

原文地址:http://www.cnblogs.com/utank/p/4773663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!