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

Posted 128-cdy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用二分法查询二维整型数组的值(找到返回其坐标)相关的知识,希望对你有一定的参考价值。

 该二维数组的特征是:

  •  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);

技术图片

 

以上是关于使用二分法查询二维整型数组的值(找到返回其坐标)的主要内容,如果未能解决你的问题,请参考以下文章

C语言试题三十七之求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。

C++中如何在一个二维数组中查找某个值

二分查找

LeetCode74. 搜索二维矩阵

插值二维点数组

C语言编程 在整型有序数组中查找想要的数字并且返回下标