一维数组之二分查找

二分查找

/**
     * @param args
     * @author wangxianpeng
     * 工作原理  :
     * 二分查找法 又称折半查找法 。将数组中间位置记录的关键字与查找的关键字进行比较,
     * 如果两者相等 则查找成功; 否则利用中间位置记录将数组分成前,后两个子数组
     * ,如果中间位置记录的关键字大于查找关键字,则进一步查找前面的子数组
     * ,否则 进一步查找后面的子数组。重复以上的过程,直到找到或找不到为止。
     *
     * 步骤:
     * 1. 创建数组  array并静态初始化。
     *
     * 2. 提示用户 属于要查找的数 number
     *
     * 3.声明开始下标start, 结束下标 end ,中间下标 middle并赋值   。
     *
     * 4.声明下标号 index  并赋值为-1;
     *
     * 5. 找出中间坐标的公式是  middle = (start + end) / 2。
     *
     * 6.if (number == array[middle]) 则把下 index = middle; break;
     *
     * 7.if(number > array[middle])   则 start = middle +1;
     *
     * 8.if(number < array{middle]) 则 end = middle -1;
     *
     * 采用while 循环 条件是 (start <= end )
     *
     * 输出结果  :如果index =-1 则没找到
     * 否则 输出下标
     */

 1 public static void main(String[] args) {
 2         Scanner input = new Scanner(System.in);
 3         System.out.println("轻输入一个数");
 4         int Number = input.nextInt();
 5 
 6             int []array = {1,2,3,4,5,6,7,8,9};
 7             int start = 0;
 8             int end= array.length -1;
 9             int middel = 0;
10             int index = -1;
11 
12  
13 
14 
15             while (start <= end){
16 
17 
18                            middel = (start + end ) / 2;
19             
20                             if(Number == array[middel]){
21                                  index = middel+1;
22                                   break;
23                                }
24                    else if(Number > array[middel]){
25                         start = middel + 1;
26                     }
27                  else {
28                           end = middel - 1 ;
29                   }
30                   }
31         
32        if(array(Number) == -1){
33             System.out.println("not find");
34              }
35 
36 
37       else {
38                System.out.println("find at "+ array(Number));
39         }
40    }  

 

转载于:https://www.cnblogs.com/yupeng1234/p/6639004.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值