2021-08-12 二分查找(折半查找)

二分查找(折半查找)

概述

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

原理

首先,假设数组中的元素是按照升序排列,数组中间位置的数据与查找数据比较,如果两者相等,则查找成功,否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查找后子数组。

重复上述过程,直到找到满足条件的数据,则表示查找成功,直到子数组不存在位置,则表示查找不成功。

所以,一个新无序数组,需要进行特定算法,进行顺序排列,然后就可以通过 折半算法进行指定数据查找。

折半查找

程序部分
public class BinarySearchDemo{
/**
*	折半查找
*/
    public static void main(String[] args){
    	int[] nums = {1,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};
    	//要查找的数据
    	int num = 37; 
    	
    	//关键的三个变量: 
    	//1.最小范围下标
    	int minIndex = 0;
    	//2.最大范围下标
    	int maxIndex = num.length - 1;
    	//3.中间数据下标
    	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
    		centerIndex = (minIndex + maxIndex)/2;
    	}//while
    }//main





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值