二分查找要先排序,再查找
package com.itheima.d8_sort_binarysearch;/*** 目标:理解二分搜索的原理并实现*/public class Test2 {public static void main(String[] args) {// 1.定义数组 // 使用二分查找要先排序int[] arr = {10,14,16,18,20,22,24,26,28};System.out.println(binarySearch(arr, 28));}/*** 二分查找算法的实现* @param arr 排序的数组* @param data 要找的数据* @return 索引, 如果元素不存在,直接返回-1*/// 使用二分查找,最好是定义成方法public static int binarySearch(int[] arr, int data){// 1. 定义左边位置 和 右边位置int left = 0;int right = arr.length - 1; // 获取右边最后一个元素的索引// 2. 开始循环,折半查询while (left <= right){// 取中间索引int middleIndex = (left + right) / 2; // 不精确没关系,差不多中间位置即可// 3. 判断当前中间位置的元素和要找的元素的大小情况if (data > arr[middleIndex]) {// 如果要找的数据元素,大于 中间索引// 则往右边找,左边位置更新为 = 中间索引 + 1 . 加完1 后 执行上面的代码left <= right再次比较left = middleIndex + 1;}else if (data < arr[middleIndex]){// 如果要找的元素 小于中间元素// 则往左边找 , 右边位置更新为 = 中间索引 - 1 减完1 后 执行上面的代码left <= right再次比较right = middleIndex -1;}else {// 当要找到数据元素等于中间元素,则直接返回return middleIndex;}}// 当都没有找到时:返回-1return -1;}}
