Java數據結構與算法之二分查找詳解
Java二分查找
使用前提:二分查找需要在有序數組中進行查找
需求
請對一個有序數組進行二分查找{1,8,10,89,1000,1024},輸入一個數字看看該數組中是否存在此數,并且求出下標,如果沒有就返回“-1”
思路分析:
首先確定該數組的中間下標
1.mid=(left+right)/2
2.然后讓需要查找的數findval和arr[mid]比較
- findval>arr[mid]說明你要查找的數字在mid的右邊,因此需要遞歸的向右進行查找
- findval<arr[mid]說明你要查找的數字咋mid的左邊,因此需要遞歸的向左進行查找
- findval==arr[mid]說明找到,就返回
什么時候需要結束遞歸?
1.找到了數據就結束遞歸
2.遞歸完整個數組,仍然沒有找到findval,也需要結束遞歸 當left>right就需要退出
代碼實現
/** * 二分查找 * 使用二分查找的前提 數組必須有序 從小到大 從大到小都可以 * * @create: 2021/10/2 * @author: Tony Stark */ public class BinarySearch { public static void main(String[] args) { int[] arr = {1, 8, 10, 89, 1000, 1024}; int i = binarySearch(arr, 0, arr.length - 1, 1024); System.out.println(i); } /** * 二分查找的方法 * @param arr 數組 * @param left 左邊的索引 * @param right 右邊的索引 * @param findVal 要查找的值 * @return 如果找到就返回下標 ,沒有找到就返回-1 */ public static int binarySearch(int[] arr,int left,int right,int findVal){ //當left大于right時說明遞歸了整個數組但是沒有找到 if (left>right){ return -1; } //中間值的下標 int mid=(left+right)/2; //中間值 int midVal=arr[mid]; //如果要找的值大于中間值 向右遞歸 現在數組是從小到大 所以向右遞歸 if (findVal>midVal){ //向右遞歸 return binarySearch(arr,mid+1,right,findVal); }else if(findVal<midVal){ //如果要找的值小于中間值向左遞歸 return binarySearch(arr, left,mid-1, findVal); }else if (findVal==midVal){ //這種情況就是找到了那個數字 return mid; } return -1; } }
輸出
5
到此這篇關于Java數據結構與算法之二分查找詳解的文章就介紹到這了,更多相關Java二分查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring boot中PropertySource注解的使用方法詳解
這篇文章主要給大家介紹了關于Spring boot中PropertySource注解的使用方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。2017-12-12使用nexus3.X上傳本地jar包并且通過pom讀取的解決方案(全網最新)
這篇文章主要介紹了使用nexus3.X上傳本地jar包并且通過pom讀取的解決方案(全網最新),本文內容有點長,結合圖文實例給大家講解的非常詳細,需要的朋友可以參考下2023-11-11