JAVA基础篇----二分查找

JAVA基础篇----二分查找

概述

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据
必须采用顺序存储结构有序排列。

原理

首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;
否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数
组,否则进一步查找后子数组。重复以上过程,直到找到满足条件的数据,则表示查找成功,直到子数组不存在为止,表示查找不成功。

优点

比较次数少,查找速度快,数据量越大,利用二分查找节省的性能越高。

缺点

要求待查数据要有序排列,且插入删除困难。

在数组中利用二分查找查找数据

1.找到要查数据的边界,在数组中为最小下标和最大下标。

2.利用最小下标和最大下标找到中间下标,中间下标等于最小下标+最大下标除以2.

3.比较要查找的数据与中间下标数据的大小。如果要查找数据大于中间下标数据,将最小下标修改为中间下标+1,如果要查找的数据小于中间下标数据,将最大下标改为中间下标-1。

4.当最小下标大于最大下标时,说明数据是不存在的。

5.重复的执行上面的过程直到中间下标的数据与要查找的数据相等。中间下标的值就是要查数据的位置。

二分查找代码

import java.util.Scanner;

public class Demo4 {

	public static void main(String[] args) {
		//接受用户输入并创建一个数组
		Scanner input = new Scanner(System.in);
		int[] nums = new int[10];	
		for(int i = 0;i<10;i++) {
			System.out.println("请输入一个整数:");
			nums[i] = input.nextInt();	
		}
		System.out.println("请任意输入一个要查找的整数:");
		int num = input.nextInt();
		//二分查找
		int minIndex = 0;
		//最大范围下标
		int maxIndex = nums.length-1;
		//中间数据下标
		int centerIndex = (minIndex+maxIndex)/2;
		while(true) {
			// 中间数据较大
			if(nums[centerIndex]>num) {
				maxIndex = centerIndex-1;
			}else if(nums[centerIndex]<num) {
				//中间数据较小
				minIndex = centerIndex+1;
		    }else {
		    	//找到了数据,数据位置:centerIndex
		    	break;		    		    			    		    	
		    }
			if(minIndex>maxIndex) {
				centerIndex = -1;
				break;
			}
			//当边界发生变化,需要更新中间下标
			centerIndex = (minIndex+maxIndex)/2;
		}
        System.out.println("位置"+centerIndex);
		
			
			
		}

	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值