二分查找(java)

一、问题描述

Description

输入为有序数组和待查找的数,输出为待查找的数在该数组中的位置(若待查找的数不在该数组中,输出 -1 )

Input

输入为两行,第一行为有序数组,元素以空格分隔; 第二行为待查找的数,如:

11 20 29 37 41 50 60 66

66

Output

输出为待查找数所在位置,如对于上面“输入描述”中的例子,输出应为:

7

Sample Input 1 

1 2 3
3

Sample Output 1

2

Sample Input 2 

1 2 3
4

Sample Output 2

-1

二、代码解析

       这段 Java 代码实现了二分查找算法。在这个算法中,数组 a 包含了被搜索的元素,k 是需要查找的目标元素。程序首先读取一行输入,将其分割成整数,并将其存储在数组 a 中。接着,程序读取一个整数 k,表示需要查找的目标元素。

        然后,使用二分查找算法,在数组 a 中查找目标元素 k。二分查找的基本思想是:首先确定数组的中间位置,如果中间位置的元素等于目标元素,则查找成功;如果中间位置的元素大于目标元素,则在数组的左半部分继续查找;如果中间位置的元素小于目标元素,则在数组的右半部分继续查找。重复这个过程,直到找到目标元素或者确定目标元素不在数组中。

        这段代码中,ij 表示当前搜索范围的起始和结束位置,mid 表示中间位置。在每一步迭代中,首先判断中间位置的元素是否等于目标元素 k,如果是,则将当前中间位置 mid 赋给 index,表示找到了目标元素的索引。如果中间位置的元素大于 k,则将搜索范围缩小为左半部分,即将 j 更新为 mid - 1。如果中间位置的元素小于 k,则将搜索范围缩小为右半部分,即将 i 更新为 mid + 1

        最终,如果找到了目标元素,index 将存储目标元素在数组中的索引;如果没有找到,index 保持为初始值 -1。程序最后输出 index 的值,表示目标元素在数组中的位置(如果找到的话)或者 -1(如果没有找到)。

三、完整代码

import java.util.Scanner;

public class Main {
	 public static void main(String[] args) {
	    	Scanner in=new Scanner(System.in);
	    	int a[]=new int[1000];
	    	int i,n,mid,j;
	    	String str;
	    	str=in.nextLine();
	    	String divint[]=str.split(" ");
	    	n=divint.length;
	    	for(i=0;i<n;i++) {
	    		a[i]=Integer.parseInt(divint[i]);
	    		
	    	}
	    	int k=in.nextInt();
	    	int index=-1;
	    	j=n-1;
	    	i=0;
	    	mid=(i+j)/2;
	    	
	    	while(i<=j) {
	    		if(a[mid]==k) {
	    			index=mid;
	    			break;
	    		}
	    		else if(a[mid]>k) {
	    			j=mid-1;
	    			mid=(i+j)/2;
	    		}
	    		else {
	    			  i=mid+1;
	    			  mid=(i+j)/2;
	    		}
	    	}
	    	System.out.println(index);
	 }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值