java实现二分查找

版权申明

二分查找(折半查找)

什么叫二分查找呢?我们先来看下百科咋说的:
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列;

我们这里就用数组实现,且数组需要按照小到大的顺序排序,才能找到准确的位置,这里可能有同学要说了,就算是乱序的数组,也可以先进行排序再查找,但是这样找出来的还是他原本的位置吗?显然不是;

那就先举个栗子吧,比如我们要进行一个猜价格的小游戏,这个价格在100到200之间,而通常我们会怎么比较快速的找到准确的价格呢?那我们就先猜个150;如果小了那我们第二次猜就用该在151到200之间去猜;如果大了呢,那就应该在100到149之间找;第三种情况,刚好150就是我们要找的数,那此时前面的两种情况我们都不需要再去考虑了…说了半天不如直接上手代码;

package com.etime1;

import java.util.Scanner;

public class BinarySearch {

	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入你要查找的数:");
		int[] intArray = { 0, 2, 5, 6, 8, 9, 15, 25, 30 };
		int value = scan.nextInt();
		BinarySearch search = new BinarySearch();
		int binarySearch = search.binarySearch(intArray, value);
		if (binarySearch != -1) {
			System.out.println("您要查找的数是" + value + "它的位置是:" + binarySearch);
		} else {
			System.out.println("数组中没有您要查找的数" + value);
		}
		scan.close();
	}

	public int binarySearch(int[] intArray, int value) {
		int max = intArray.length - 1;
		/*
		 * 在此处最大值等于数组长度减1,因为数组的索引值是从0开始
		 * 最大值就用该等于数组的最后一个元素,而它的索引值就是数组长度length-1
		 * 如果不减一就会出现数组索引越界异常
		 */
		int min = 0;  //那么最小值就是0啦
		int mid = (max + min) / 2; 
		//当value不等于中间值时才判断;
		while (intArray[mid] != value) {
			//第一种情况
			if (intArray[mid] < value) {
				min = mid + 1;
				//第二种情况
			} else if (intArray[mid] > value) {
				max = mid - 1;
			}
			mid = (max + min) / 2;
			//如果最小值大于最大值就直接返回-1
			if (min > max) {
				return -1;
			}
		}
		//最后直接返回mid的值
		return mid;
	}
}

最后我们看一下运行结果:

在这里插入图片描述
最后,注释写得有点多,希望各位不要吐槽哦。哈哈,这两天在学前端的内容,学得是一头雾水啊,是不是我太菜了,ajax、jQuery、bootstrap框架…我太难了。
内容可能有一些不太正确的地方,特别是举的栗子可能不太行性形象,嘿嘿嘿,希望各位能够指正,我这java菜鸟的进阶之路还太远啊。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值