package com.ldy.arithmetic;
import java.util.Arrays;
public class BinarySearch {
public static void main(String[] args)
{
String[] s={"1","2","3","4","5","6","7","8"};
// int value = binarySearchForString(s,"a");
int value=binarySearchForString(s,"7");
// int value= Arrays.binarySearch(s,"7");
// int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// int value = binarySearchForInteger(a, 1);
System.out.println(value);
}
//用于查找字符类型,此处使用的是Arrays.binarySearch二分查找的源码
private static int binarySearchForString(String[] s, String a) {
int startIndex=0;
int endIndex=s.length-1;
while(startIndex<=endIndex){
int middleIndex=(startIndex+endIndex)>>>1;
// Comparable midVal = s[middleIndex];
// int i = midVal.compareTo(a);
//String类型实现了Comparable接口,可以直接调用comparableTo方法
int i =s[middleIndex].compareTo(a);
if(i<0){
startIndex=middleIndex+1;
}else if(i>0){
endIndex=middleIndex-1;
}else{
return middleIndex;
}
}
return -1;
}
//用于查找数字类型
public static int binarySearchForInteger(int[] array, int value) {
int startIndex = 0;
int endIndex = array.length - 1;
while(startIndex <= endIndex)
{
// >>>1等价于(startIndex + endIndex)/2.>>>属于无符号右移,所得结果都为正数。
// >>属于有符号右移,结果可正可负,视情况而定
int middleIndex = (startIndex + endIndex) >>>1;
if(value == array[middleIndex])
{
return middleIndex;
}
if(value > array[middleIndex])
{
startIndex = middleIndex + 1;
}
if(value < array[middleIndex])
{
endIndex = middleIndex - 1;
}
}
return -1;
}
}