java二分查找

java二分查找

1.二分查找
算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
2.代码实现

package com.ls.binarysearch;

import java.util.Arrays;
import java.util.Scanner;

public class TestBinarySearch {
    public  static void main(String[] args){
    int[] array ={80, 53, 63, 5, 81, 84, 88, 91, 94};
           //对数组a排序
        //Arrays.sort(a)优化的快速排序算方法
        Arrays.sort(array);
        System.out.println("查找的值:");
        int t = new Scanner(System.in).nextInt();
        int i = binarySearch(array, t);
        System.out.println(i);

    }
      /**
     * 主要代码
     * @param array
     * @param t
     * @return
     */
    private static int binarySearch(int[] array, int t){
        /**     t=63       mid
         * [8, 53, 63, 76, 81, 84, 88, 91, 94]
         *  lo                             hi
         *  1.定义三个下标变量
         *  lo = 0
         *  hi =a.length-1
         *  mid;
         *  2.当lo<=hi
         *      3.计算中间位置下标存到变量mid
         *      4.如果mid位置值比t小
         *       lo定位到mid+1
         *       5.否则如果mid位置值比t大
         *       hi定位到mid-1
         *       6.否则,返回mid下标值
         * 7.找不到,返回-1,表示找不到
         */
        int lo = 0,mid,hi= array.length-1;
        while (lo<=hi){
            mid=(lo+hi)/2;
            if(array[mid]<t){
                lo=mid+1;
            }else if (array[mid]>t){
                hi=mid-1;
            }else {
                return mid;
            }
        }
        return -1;
    }
}

posted @ 2019-04-11 17:30  smileLS66  阅读(54)  评论(0编辑  收藏  举报