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





猜你喜欢

转载自blog.csdn.net/qq_43098690/article/details/119648509