二分查找:
这个算法是比较简单的,容易理解的。这个算法是对有序的数组进行查找,所以想要使用这个算法那么
首先先要对数组进行排序。
其实有三个指针,开始指针,末尾指针,中间指针,来开始。折半查找。
步骤如下:
1、确定三个指针,start,end,middleIndex。
2、判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到。
3、在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值。
4、判断中间位置的值和目标值是否相等,如果相等就返回这个位置。
不相等,如果中间位置的值比目标值大,就在左半边的数组来递归查找这个目标值,
否则在右边的数组查找递归这个目标值。
5.返回值。
package com.test4; /** * 二分查找 * * @author sdc * */ public class BinarySearch { // 查找某个元素需要的次数 static int count; public static void main(String[] args) { } /** * 二分查找--递归的形式,二分查找是对有序的数组查找 * * @param sortArray * @param start * @param end * @param target * @return */ public static int binarySearch(int[] sortArray, int start, int end, int target) { if (sortArray == null) { return -1; } int sortArrayLength = sortArray.length; if (sortArrayLength == 1) { return sortArray[0]; } count++; // 真正开始了,查找 if (start <= end) { // 中间的位置 int middleIndex = (start + end) >> 1; // 中间的值 int middleData = sortArray[middleIndex]; if (middleData == target) { return middleIndex; } else if (middleData < target) { return binarySearch(sortArray, middleIndex + 1, end, target); } else { return binarySearch(sortArray, start, middleIndex - 1, target); } } else { // 给的返回值不对 return -1; } } /** * 二分查找-非递归的形式 * * @param sortArray * @param target * @return */ public static int serarch(int[] sortArray, int target) { if (sortArray == null) { return -1; } // 起始位置 int start = 0; // 结束位置 int end = sortArray.length - 1; while (start <= end) { // 一直循环查找 // 中间位置 int middleIndex = (start + end) >> 1; if(sortArray[middleIndex] == target) { return middleIndex; }else if(sortArray[middleIndex] > target) { end = middleIndex -1; }else { start = middleIndex +1; } } return -1; } }
结束:
时间: 2024-10-21 11:55:29