zoukankan      html  css  js  c++  java
  • 使用二分法查询二维整型数组的值(找到返回其坐标)

     该二维数组的特征是:

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

  • 相关阅读:
    ubuntu18.04 常用命令
    docker常用命令
    git
    y7000 intel nvidia 双显卡安装Ubuntu16.04
    linux中fork() 函数详解
    理解GBN协议
    C++ sort
    最近点对-分治
    方便查看 linux/kernel/system_call.s
    方便查看 linux/kernel/asm.s
  • 原文地址:https://www.cnblogs.com/128-cdy/p/12595893.html
Copyright © 2011-2022 走看看