Java实现二分法查找

笔者前几日荒废了学习,深感不安,故今日连续编码并整理发文,都是简单的东东,希望有能用得到的人!下面是个人总结,用语可能不够严谨,仅供参考!

二分排序法:

1.适用场景-->有序列

2.思想-->
   每次取中间的数同目标数做比较,比目标数大,则需要向左边递归;比目标数小,则向右边递归;如果相等,则不执行递归,因为找到了目标元素;
3.实现-->
   a.初始化递归应该包含左右边界,目标数,被查找序列四个入参;
   b.取中间数,同目标数比较:
      -->比目标数大,向左递归,左边界不变,右边界变为midIndex-1;
      -->比目标数小,向右递归,右边界不变,左边界变为midIndex+1;
      -->相等,不递归,直接输出目标数位置;
   c.最重要的是,保证递归不死循环,要在b步骤的外层,加一个大的判断条件,即入参rightIndex>=leftIndex ;

 

特此说明:

此段代码用到笔者前些日的《Java实现排序》中的插入法排序类中的方法,因为二分法查找只适用有序列;

读者如想简单使用的话,可以直接初始化一个有序列,在主函数中直接调用bf.finding(0,length-1,val,arr)即可。

 

 

/**
 * 演示二分法查找,调用Insertion类的排序方法
 * Created by Light on 2014-7-27
 */
package com.second;
public class DoFinding {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//初始化数组
		int arr[] = {0,9,3,5,2,7,6,4,1,8};
		//int arr[] = {0,1,2,3,4,5,6,7,8,9};
		//int arr[] = new int[0];
		//int arr[] = new int[10];
		//初始化数组,使用for循环
		/*
		for(int i=0;ival)
			{
				finding(leftIndex,midIndex-1,val,arr);
			}else if(midVal=0)
		{
			//先排序
			Insertion ins = new Insertion();
			ins.sort(arr);
			ins.showArray(arr);
			//再查找
			finding(0,arr.length-1,val,arr);
		}else{
			System.out.println("此数组为空,无法查找!老大,你逗我呢?!");
		}
	}
}









 

你可能感兴趣的:(Java实现二分法查找)