使用二分法查询二维整型数组的值(找到返回其坐标)

倖福魔咒の 提交于 2020-03-30 00:24:23

 该二维数组的特征是:

  •  a.每行中的整数从左到右按升序排列。 
  •  b.每行的第一个整数大于前一行的最后一个整数。

可以每行都进行二分查找(由于该数组的特征,所以可以先将要查找的数与本行的最后一个数据比较,若大于则直接进入下一行比较,增加效率,减少比较的次数),如果未找到则进入下一层,直到找完该二维数组。

private static String find(int[][] arr, int num) {    int row = 0;  //控制行数    while (row < arr.length){        int left = 0;  //行的左下标        int right = arr[row].length - 1;   //行的右下标        while (left <= right) {  //每一行进行二分查找            if(num > arr[row][right]){  //如果查找的数比该行的最后一个数还大,则直接进入下一行的比较                break;            }            //int mid = (left + right) / 2;            int mid = (right - left + 1) / 2 + left; //防止相加超过数据类型的上界              if (arr[row][mid] == num) {                return "[" + row + "," + mid + "]";            } else if (arr[row][mid] > num) {                right = mid - 1;            } else {                left = mid + 1;            }        }//退出该层while循环说明该层未找到        ++row;  //层数加一    }//退出说明未找到    return "无该整数";}

 

测试如下:

int[][] arr = {{1,3,5},{7,9},{15,19,20}};String index = find(arr,1);System.out.println(index);String index1 = find(arr,20);System.out.println(index1);String index2 = find(arr,9);System.out.println(index2);String index3 = find(arr,0);System.out.println(index3);

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!