二分查找(折半查找)
概述
二分查找也称折半查找(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