二分法查找算法

二分法查找算法主要思路:
首先是需要一个有序的数组a[];
在方法rank()中实现二分法查找。rank()方法有两个参数,分别是要查询的关键字key,有序的数组a[]。

rank(int key, int a[])方法:
需要知道数组的最低位元素位置和最高位元素位置,分别设置为int low = 0; int hight = a.length -1。


二分法的核心思想是通过与中间的参数进行比较,不断的缩减需要的范围,从而快速找到对应的关键字key是否在数组a中。
所以需要中间值mid = low + (hight - low)/2;
不断查询需要有个循环来实现,while()中的内容是要满足 low的值要小于或者等于hight的值,即while(low <= hight)。
满足循环之后,需要对key值与具体的中间值比较,主要有大于、小于或者是等于三种情况。
if(key < a[mid]) hight = mid -1;
if(key > a[mid]) low =mid +1;
if(key = a[mid)reutrn a[mid]
如果未找到符合要求的数字,则输出 return -1;

代码如下:
package chapter1.a1 ;

import edu.princeton.cs.algs4.In ;

/**
 * Created by fengjw on 2017/7/5.
 * 二分法实现
 */


public class BinarySearch {
    public static int  rank( int key , int [] a){ //两个参数,一个是要查找的关键字key,一个是需要查找的数组a[]
        //int mid = 0;
        int low =  0 ;
        int hight = a. length - 1 ;
        System. out.print( "二分法查询的结果为:") ;
//        while(low <= hight){
//            int mid = low + (hight - low)/2;
//            if(key < a[mid]){
//                hight = mid -1;
//            }else if(key > a[mid]){
//                low = mid +1;
//            }else{
//                return a[mid];
//            }
//        }
        //这里可以使用另一种方法实现:
        while(low <= hight){
            int mid = low + (hight - low)/ 2 ;
            if(key < a[mid]) hight = mid - 1 ;
            if(key > a[mid]) low = mid + 1 ;
            if(key == a[mid])  return a[mid] ;
        }


        System. out.println( "无查询的数字") ;
        return  0 ;
    }

    public static void  main(String [] args){
        int [] a = { 1 , 2 , 3 , 4 , 6 , 7 , 8} //数组是有序的
        int key =  6 ;
        System. out.println( rank(key a)) ;
    }


}

你可能感兴趣的:(二分法查找算法)