【问题标题】:number of loops of binary search method二分查找法的循环次数
【发布时间】:2017-04-14 08:17:52
【问题描述】:

嘿,我想找到二分搜索的比较次数,我用这种方法来计算比较次数。然而,它总是返回 -1,因为尽管数组包含数字,但它没有找到 numsearch。 这是我的方法..count指的是比较的次数。

 public static int BinarySearch (int n, Integer[] ran) {
     int low = 0;
     int high = ran.length-1;
      int count = 0;
     int middle;
   while (low<=high) {

        count++;
        middle = (high - low)/2;
        if (ran[middle] == n)  {
            return count;
        }
        else if (ran[middle] > n)  {
            high = middle - 1;

        }
        else {
            low = middle + 1;

        }

    }


     return -1;          
    }

【问题讨论】:

    标签: java search binary-search


    【解决方案1】:

    将最后一行从return -1 更改为return count。

    【讨论】:

    • 我试过了,但它返回 2 或继续循环,我必须手动停止它
    • 代码本身也不是真的正确。也许您应该审查您的实施。我会将middle = (high - low)/2; 更改为middle = (high + low)/2;
    • 谢谢兄弟,我已经更改了代码。然而,它给了我 5 或 4
    【解决方案2】:
    public static int BinarySearch(int n, Integer[] ran) {
        int low = 0;
        int high = ran.length - 1;
        int count = 0;
        while (high >= low) {
            count++;
            int middle = (low + high) / 2;
            if (ran[middle] == n) {
                return count;
            }
            if (ran[middle] < n) {
                low = middle + 1;
            }
            if (ran[middle] > n) {
                high = middle - 1;
            }
        }
        return count;
    }
    

    【讨论】:

    • 谢谢兄弟,我想我想出了一个解决方案,因为排序后的数组是按降序排列的,所以我不得不改变 if (ran[middle] > n) { low = middle + 1; } if (ran[middle]
    猜你喜欢
    • 2018-02-25
    • 2022-01-03
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多