Java二分查找法(40)

目录

一、二分查找法

二、假设

三、代码及结果

(一)代码

(二)结果


一、二分查找法

(一)二分查找法是一种常见的查找法。

(二)使用二分查找法的前提条件是数组元素必须已经排序

(三)不失一般性,假设数组按升序排序。

(四)二分查找法首先将关键字数组的中间元素比较,有下面3种情况:

·   如果关键字比中间元素小,那么只需在前一半数组元素中查找。

·   如果关键字和中间元素相等,则查找成功,查找结束。

·   如果关键字比中间元素大,那么只需在后一半数组元素中查找。

(五)显然,二分法查找每比较一次就排除数组中一半的元素。

二、假设

假设用low和high分别记录当前查找的数组的第一个和最后一个下标。初始条件下,low为0,high为array.length-1。mid表示数组中间元素的下标,这样mid就是(low+high) / 2。

首先,关键字key与中间元素array[mid]比较,如果小于中间元素,将high设为mid-1;如果等于中间元素,则匹配成功,返回mid;如果大于中间元组,将low设为mid + 1。继续这样的查找,直到low > high或查找成功。如果low > high,则返回-low -1,low就是插入点。

三、代码及结果

(一)代码

package csdn.every.day;

public class Day35ErFen {
    public static void main(String[] args) {
        int[] a = {75, 55, 30, 10, 50, 199, 13, 54};
        int key = 55;
        PaiXu(a);//冒泡排序(升序)
        System.out.println("\n" + "关键字的位置(数组的下标):" + binarySearch(a, key));
    }

    public static int[] PaiXu(int[] a) {
        for (var i = 0; i < a.length - 1; i++) {           //找到最大,最后出场的都是大佬嘛
            for (var j = 0; j < a.length - i - 1; j++) {
                if (a[j] > a[j + 1]) {              //若想要降序,修改为 < 即可。
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        }

        for (var n2 : a) {
            System.out.print(" " + n2);
        }
        return a;
    }


    public static int binarySearch(int[] array, int key){

            int low = 0;

            int high = array.length-1;

            while(high >=low){

                int mid = (low+high)/2;

                if(key< array[mid])

                    high = mid -1;

                else if(key == array[mid])

                return mid;

                else

                low = mid +1;

            }

            return -low-1;

    }

}

(二)结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值