题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。 完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含该整数。
package Problem3;
2
3 public class Find {
4
5 /*
6 * 题目描述:二维数组中的查找
7 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。
8 * 完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含该整数
9 *
10 */
11 public static boolean find(int arr[][],int keyNumber){
12 //从二维数组的右上角开始选取与keyNumber比较的整数
13 //column的变化:arr[0].length-1-->0;
14 //row的变化:0-->arr.length;
15 int column=arr[0].length-1;
16 int row=0;
17 while(column>=0&&row<arr.length){
18 if(arr[row][column]==keyNumber){
19 return true;
20 }
21 else if(arr[row][column]>keyNumber){
22 column--;
23 }
24 else {
25 row++;
26 }
27 }
28 return false;
29
30 }
31 //测试find函数
32 public static void main(String[] args) {
33 /*
34 * 1 2 8 9
35 * 2 4 9 12
36 * 4 7 10 13
37 * 6 8 11 15
38 */
39 int array[][]=new int[4][4];
40 array[0][0]=1;
41 array[0][1]=2;
42 array[0][2]=8;
43 array[0][3]=9;
44 array[1][0]=2;
45 array[1][1]=4;
46 array[1][2]=9;
47 array[1][3]=12;
48 array[2][0]=4;
49 array[2][1]=7;
50 array[2][2]=10;
51 array[2][3]=13;
52 array[3][0]=6;
53 array[3][1]=8;
54 array[3][2]=11;
55 array[3][3]=15;
56 System.out.println(find(array, 7));
57 System.out.println(find(array, 5));
58 }
59
60 }
同理,比较关键字也可以从二维数组的左下角开始选择,则column和row的增减方式调换一下,但是不能选择左上角和右下角的元素作为与查找元素比较的关键字,因为无论比较结果怎样,都无法进一步缩小查找的范围。