中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的二分查找是什么意思

發布時間:2021-07-06 09:26:32 來源:億速云 閱讀:156 作者:chen 欄目:編程語言

本篇內容主要講解“Java中的二分查找是什么意思”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中的二分查找是什么意思”吧!

需求

對于一個有序的數組進行二分查找{1,8,10,89,1000,1234},輸入一個數看看該數組是否存在此數,并求出下標,如果沒有就提示”沒有這個數據”。

思路分析

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 首先確定該數組中間的下標 mid=(left+right)/2.

  3. 然后讓需要查找的數findValue和arr[mid]比較,findValue >  arr[mid],說明要查找的數在arr[mid]的右邊,因此向右遞歸.findValue <  arr[mid],說明要查找的數在arr[mid]的左邊,因此向左遞歸.findValue == arr[mid],說明找打,就返回。

  4. 退出遞歸的條件找到就結束遞歸。遞歸完整個數組仍然沒有找到findValue,需要結束遞歸,即當 left > right

代碼案例

package com.xie.search;  import java.util.ArrayList; import java.util.Arrays; import java.util.List;  public class BinarySearch {     static int count = 0;      public static void main(String[] args) {         int[] arr = new int[102];         arr[0] = 1;         arr[1] = 1;         for (int i = 2; i < 102; i++) {             arr[i] = i;         }         List<Integer> indexList = binarySearch(arr, 0, arr.length - 1, 1);         System.out.println("indexList = " + indexList);         System.out.println("查找次數:" + count);         /*         indexList = [1, 0]         查找次數:6          */     }      /**      * 二分查找,查找符合值得所有索引集合      *      * @param arr       數組      * @param left      左邊索引      * @param right     右邊索引      * @param findValue 查找的值      * @return 找到就返回所有索引的集合,沒有就返回空      */     public static List<Integer> binarySearch(int[] arr, int left, int right, int findValue) {         count++;         List<Integer> indexList = new ArrayList<Integer>();         //當left > right時,說明遞歸完畢         if (left > right) {             return new ArrayList<Integer>();         }         int mid = (left + right) / 2;         int midVal = arr[mid];         if (findValue > midVal) {             //查找的值比中間值大,向右遞歸             return binarySearch(arr, mid + 1, right, findValue);         } else if (findValue < midVal) {             //查找的值比中間值小,向左遞歸             return binarySearch(arr, left, mid - 1, findValue);         } else {             //如果找到了,再向左掃描,將滿足條件的加入indexList             int temp = mid - 1;             while (true) {                 if (temp < 0 || arr[temp] != findValue) {                     break;                 }                 indexList.add(temp);                 temp--;             }              //再向右掃描,將滿足條件的加入indexList             temp = mid + 1;             while (true) {                 if (temp > right || arr[temp] != findValue) {                     break;                 }                 indexList.add(temp);                 temp++;             }             indexList.add(mid);             return indexList;         }     } }

到此,相信大家對“Java中的二分查找是什么意思”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平利县| 新闻| 襄垣县| 合作市| 嫩江县| 铜梁县| 陇川县| 策勒县| 黑龙江省| 界首市| 赤壁市| 铅山县| 巴彦县| 平凉市| 睢宁县| 搜索| 南丰县| 通州区| 周宁县| 东莞市| 观塘区| 绥滨县| 慈利县| 美姑县| 乌什县| 拉孜县| 墨玉县| 堆龙德庆县| 新干县| 商城县| 临朐县| 余庆县| 清新县| 宁海县| 庆安县| 台北市| 山阳县| 夏津县| 财经| 中方县| 德清县|