Java實現二分法的案例,什么是二分法

文章目錄

  • Java實現二分法的案例,什么是二分法
    • 二分法
      • 實現

Java實現二分法的案例,什么是二分法

二分法

概念:

  • 二分法(Bisection method) 即一分為二的方法,又叫折半查找方法。
  • 把一組有序數列分為左右兩部分,從這組數字的中間位置開始找:
  • 如果中間位置的數等于目標數,則直接返回;
  • 如果中間位置的數大于目標數,則從左邊部分查找;
  • 如果小于目標數,則從右邊部分查找;
  • 重復以上過程,直到找到滿足條件的記錄,使查找成功。

時間復雜度:
都是 O(log2 N)

空間復雜度:
非遞歸方式: 空間復雜度是O(1);
遞歸方式: 空間復雜度:O(log2N )

實現

1. 遞歸方式

 public static int binarySearchRecursive(int[] arr, int low, int high, int key) {//邊界條件:如果目標數沒有在數組范圍內(即比最左邊的數小,比最右邊的數大)if (arr == null || arr.length == 0 || arr[low] > key || arr[high] < key || low > high) {return -1;}// 獲取中間位置下標int mid = (low + high) / 2;// 將中間位置的數和目標數作比較,如果中間位置的數等于目標數,則直接返回下標,// 如果中間位置的數大于目標數,則將左邊部分用遞歸方法繼續查找;如果小于目標數,則從右邊部分用遞歸方法繼續查找if (arr[mid] == key) {return mid;} else if (arr[mid] > key) {return binarySearch(arr, low, mid - 1, key);} else {return binarySearch(arr, mid + 1, high, key);}}// 測試下:從一組數中找3,輸出數組下標public static void main(String[] args) {int[] arr = {2, 3, 5, 7, 9, 78, 90, 167};System.out.println(binarySearchRecursive(arr, 0, (arr.length) - 1, 3));}

2. 非遞歸方式

 public static int binarySearch(int[] arr, int key) {int low = 0;int high = arr.length - 1;while (low <= high) {int middle = (low + high) / 2;if (key < arr[middle]) {high = middle - 1;} else if (key > arr[middle]) {low = middle + 1;} else {return middle;}}return -1;}// 測試下:從一組數中找3,輸出數組下標public static void main(String[] args) {int[] arr = {2, 3, 5, 7, 9, 78, 90, 167};System.out.println("數組下標:"+binarySearch(arr, 3));}

3.非遞歸

/*** 二分查找* @param srcArray 源數組* @param des 目標元素* @return 如果找到則返回索引位置,找不到則返回-1*/
public static int binarySearch(int[] srcArray, int des) {//定義初始最小、最大索引int start = 0;int end = srcArray.length - 1;//確保不會出現重復查找,越界while (start <= end) {//計算出中間索引值  >>> 邏輯右移 也就是 int middle = (end + start)/2int middle = (end + start)>>>1 ;//防止溢出if (des == srcArray[middle]) {return middle;//判斷下限} else if (des < srcArray[middle]) {end = middle - 1;//判斷上限} else {start = middle + 1;}}//若沒有,則返回-1return -1;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前程無憂接口分析

前程無憂接口分析 所需用到的工具URL解析通過抓包軟件或者開發者選項抓取數據包對代碼中的參數解析分析對acw_sc__v2進行分析對acw_sc__v2進行轉換代碼生成生成outPutList數組生成arg2參數生成arg3參數最終的效果 對詳情頁面的分析對timestamp__1258的生成分析 所需用到的工具 …

Vue3.0優點詳解

相對于Vue2.0 3.0有了比較大的改進&#xff0c;優勢主要有以下幾點&#xff1a; 一、性能提升 1、Vue3.0的響應式系統使用了Proxy代理對象&#xff0c;取代了Vue2.0中的Object.defineProperty&#xff0c;使得Vue3.0的響應式系統更快、更靈活。 2、Vue3.0對TypeScript的支持更…

Ubuntu22.04安裝完成后便可直接使用鍵盤上的Print鍵進行截圖

概要&#xff1a;Ubuntu22.04安裝完成后&#xff0c;無需安裝什么截圖軟件&#xff0c;可以直接使用鍵盤上的Print鍵進行截圖。 1、按一下Print鍵 我的電腦上Print鍵是PrtSc&#xff0c;如下圖所示 2、框選區域并截圖 如下圖中&#xff0c;可以框選(Selection)&#xff0c;也…

【教學類-35-06】17號的學號字帖延伸出的全體字帖(1-9去0)(A4豎版1份)

作品展示 背景需求&#xff1a; 給大4班17號同學單獨做了一個學號字帖后&#xff0c;我想可以把這樣的學具用在中班&#xff08;我馬上要成為中4班老師了&#xff09;&#xff0c;那就需要給全班做一份這樣的大號學號貼。 使用17號同學的word模板&#xff08;見下文&#xff…

3dMax vs Cinema4d哪個更好更適合你?

Cinema 4d和3dMax的區別 用于游戲風格、開發和風格可視化的3D建模、動畫和渲染軟件系統&#xff0c;為用戶提供制作和編輯動畫、視覺效果和環境的靈活性。4D CINEMA可能是由MAXON構建的強大的3D建模、運動圖形、繪畫和動畫軟件系統。Cinema 4D將在每個Windows和MAC操作系統上運…

多目標追蹤評價指標

多目標追蹤性能評價 基礎&#xff1a; GT&#xff1a;Ground Truth&#xff0c;是指真實的標簽或者真實的對象&#xff1b; TP&#xff1a;True Positive&#xff0c;被正確預測檢測到的樣本&#xff1b; TN&#xff1a;True Negative&#xff0c;被預測為負的負樣本&#…

啃下這50道筆試題,你就是SQL專家!(附答案,收藏備用)

【關注微信公眾號&#xff1a;跟強哥學SQL&#xff0c;回復“筆試”免費領取大廠SQL筆試題。】 有兩個名為Department&#xff08;部門&#xff09;和Employees&#xff08;員工&#xff09;的表結構如下&#xff1a; CREATE TABLE Department ( DepId int, DepName va…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮兩階段魯棒優化配置的多微網合作博弈》

這個標題涉及到多個概念&#xff0c;讓我們逐步解讀&#xff1a; 考慮兩階段魯棒優化配置&#xff1a; 兩階段&#xff1a; 指的是在解決問題或進行優化時&#xff0c;可能存在兩個不同的階段或步驟。這表明問題的解決不是一步完成的&#xff0c;而是需要經過多個步驟或階段。魯…

前端學習系列之CSS

目錄 CSS 簡介 發展史 優勢 基本語法 引用方式 內部樣式 行內樣式 外部樣式 選擇器 id選擇器 class選擇器 標簽選擇器 子代選擇器 后代選擇器 相鄰兄弟選擇器 后續兄弟選擇器 交集選擇器 并集選擇器 通配符選擇器 偽類選擇器 屬性選擇器 CSS基本屬性 優…

virtualenv創建虛擬環境

目錄 概念安裝創建虛擬環境激活虛擬環境刪除虛擬環境退出虛擬環境更改虛擬環境路徑概念 virtualenv是一個創建隔離的Python運行環境的工具。它允許用戶為每個Python項目創建一個獨立的虛擬環境,以避免不同項目之間的依賴沖突。 安裝 pip install virtualenv virtualenvwrapper…

JS如何實現豎屏輪播圖

首先是HTML搭建結構 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"終于等到你還…

SpringBoot項目訪問resources下的靜態資源

1.新建一個配置文件夾&#xff0c;放配置類 2.編輯 WebMvcConfig.java package com.southwind.configuration;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import or…

openlayers地圖使用---跟隨地圖比例尺動態標繪大小的一種方式3

openlayers地圖使用—跟隨地圖比例尺動態標繪大小的一種方式 預期&#xff1a;隨著地圖比例尺放大縮小&#xff0c;地圖上的標繪隨著變化尺寸 思路&#xff1a;通過VectorImage和動態修改Feature尺寸實現Feature跟隨地圖比例尺尺寸變化 優點&#xff1a;結合第1和第2種方式的…

openlayers地圖使用---跟隨地圖比例尺動態標繪大小的一種方式2

openlayers地圖使用—跟隨地圖比例尺動態標繪大小的一種方式2 預期&#xff1a;隨著地圖比例尺放大縮小&#xff0c;地圖上的標繪隨著變化尺寸 思路&#xff1a;通過不斷添加地圖圖層實現標繪的動態縮放 優點&#xff1a;標繪放大縮小非常流暢 缺點&#xff1a;標繪超過1000…

LangChain 22 LangServe用于一鍵部署LangChain應用程序

LangChain系列文章 LangChain 實現給動物取名字&#xff0c;LangChain 2模塊化prompt template并用streamlit生成網站 實現給動物取名字LangChain 3使用Agent訪問Wikipedia和llm-math計算狗的平均年齡LangChain 4用向量數據庫Faiss存儲&#xff0c;讀取YouTube的視頻文本搜索I…

等待和通知

引入 由于線程是搶占式執行的,因此線程之間的執行的先后順序難以預知 但是實際開發中我們希望合理協調多個線程之間執行的先后順序. 這里的干預線程先后順序,并不是影響系統的調度策略(內核里調度線程,仍然是無序調度). 就是相當于在應用程序代碼中,讓后執行的線程主動放棄被…

3DCAT+上汽奧迪:打造新零售汽車配置器實時云渲染解決方案

在 5G、云計算等技術飛速發展的加持下&#xff0c;云渲染技術迎來了突飛猛進的發展。在這樣的背景下&#xff0c;3DCAT應運而生&#xff0c;成為了業內知名的實時云渲染服務商之一。 交互式3D實時云看車作為云渲染技術的一種使用場景&#xff0c;也逐步成為一種新的看車方式&a…

設備溫度和振動綜合監測:溫振一體式傳感器的優點和應用

隨著工業設備的復雜性和自動化程度的提高&#xff0c;對設備狀態監測的需求也日益增加。溫振一體式傳感器作為一種集振動和溫度監測于一體的傳感器&#xff0c;具備多項優勢&#xff0c;因此在工業設備狀態監測領域得到廣泛應用。 溫振一體式傳感器基于振動傳感器和溫度傳感器的…

1380 一筆畫問題

如果一個無向圖存在一筆畫&#xff0c;則一筆畫的路徑叫做歐拉路&#xff0c;如果最后又回到起點&#xff0c;那這個路徑叫做歐拉回路。 #include<bits/stdc.h> using namespace std; #define N 510 int g[N][N],d[N],c[N],n,m,reckon,oddity_point,lt; void dfs(int i)…

網絡運維與網絡安全 學習筆記2023.12.1

網絡運維與網絡安全 學習筆記 第三十二天 今日目標 ACL原理與類型、基本ACL配置、高級ACL配置 高級ACL之ICMP、高級ACL之telnet ACL原理與類型 項目背景 為了企業的業務安全&#xff0c;要求不同部門對服務器有不同的權限 PC1不能訪問Server PC2允許訪問Server 允許其他所…