package com.test.test;
import java.util.Arrays;
/**
* [说明/描述] 1.排好序 2.若存在返回插入点(0开始)若不存在则返回-插入点-1位置即大于当前元素的第一个值得索引
*
* @author CaiHaiming
* @date 2016-6-8 下午11:19:22
* @company chm
* @version 1.0
* @copyright copyright (c) 2016
*/
public class BinarySerach {
public static void main(String[] args) {
int[] arr = { 1, 2, 23, 123, 123, 134, 12312 };
// 返回第一个大于此数值的索引的负数(1开始)
System.out.println(Arrays.binarySearch(arr, 0));// 返回第一个大于此数值的插入点
try {
int[] i = { 1, 2, 23, 123, 125, 134, 12312 };
System.out.println(BinarySerach.serach(i, 0));
} catch (Exception e) {
e.printStackTrace();// 应该是开了一个多线程
System.out.println(e.getMessage());
}
}
/**
* 手动实现二分查找 [描述信息] <br>
*
* @author CaiHaiming <br>
* @date 2016-6-10 上午10:21:25 <br>
* @param arr
* @return <br>
*/
public static int serach(int[] arr, int key) {
if (arr == null || arr.length == 0) {
throw new NullPointerException("请传入有效数值");
}
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while (min <= max) {
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
} else {
return mid;
}
mid = (min + max) / 2;
}
return -(min) - 1;
}
}
二分查找
最新推荐文章于 2022-02-16 14:31:27 发布