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;
}
}