/*
* 折半查找,二分查找:
* 前提:数组必须是有序的。
*/
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr = { 18, 37, 54, 76, 92 };
// 如何获取数据92在数组中的索引呢
//int index = getIndex(arr, 92);
int index = getIndex(arr, 76);
//int index = getIndex(arr, 26);
System.out.println(index);
}
public static int getIndex(int[] arr, int value) {
// 定义最大索引
int maxIndex = arr.length - 1;
// 定义最小索引
int minIndex = 0;
// 定义中间索引
int midIndex = (maxIndex + minIndex) / 2;
while (arr[midIndex] != value) {
if (arr[midIndex] > value) {
maxIndex = midIndex - 1;
} else if (arr[midIndex] < value) {
minIndex = midIndex + 1;
}
// 如果数据不存在。
if (minIndex > maxIndex) {
return -1;
}
// 下一次二分查找开始
midIndex = (maxIndex + minIndex) / 2;
}
return midIndex;
}
}
相关文章
- 一文搞懂工作流审批(Java+activiti)快速开发+自定义工作流配置
- 201621123033 《Java程序设计》第8周学习总结
- Java高并发之设计模式
- java多线程系列(二)---对象变量并发访问
- java多线程系列(二)
- js 排序:sort()方法、冒泡排序、二分法排序。
- JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- “全栈2019”Java第十二章:变量
- C#,Java,C -循环冗余检验:CRC-16-CCITT查表法