JAVA編程——二分法查找

2020-12-05 胖鹹魚先生說

一、二分法檢索過程

二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設數組中的元素從小到大有序地存放在數組(array)中(註:二分法查找的關鍵,首先數組元素必須從小到大有序排列),(1)首先將給定值 key 與數組中間位置上元素的關鍵碼(key)比較,如果相等,則檢索成功; (2)否則,若 key 小,則在數組前半部分中繼續進行二分法檢索; (3)若 key 大,則在數組後半部分中繼續進行二分法檢索。 這樣,經過一次比較就縮小一半的檢索區間,如此進行下去,直到檢索成功或檢索失敗。 二分法檢索是一種效率較高的檢索方法。

以下是利用二分法查找數組【7,8,9,10,12,20,30,40,50,80,100】中元素10的索引的圖示過程:

二、二分法查找實例

例:查找數組{ 30,20,50,10,80,9,7,12,100,40,8}中20的索引

1.代碼如下:

package cn.pxy.test;

import java.util.Arrays;

/**

* 冒泡排序

* @author 胖鹹魚

*

*/

public class Test {

public static void main(String[ ] args) {

int[ ] arr = { 30,20,50,10,80,9,7,12,100,40,8};

int searchWord = 20; // 所要查找的數

Arrays.sort(arr); //二分法查找之前,一定要對數組元素排序

System.out.println(Arrays.toString(arr));

System.out.println(searchWord+"元素的索引: "+binarySearch(arr,searchWord));

}

public static int binarySearch(int[ ] array, int value){

int low = 0;

int high = array.length - 1;

while(low <= high){

int middle = (low + high) / 2;

if(value == array[middle]){

return middle; //返回查詢到的索引位置

}

if(value > array[middle]){

low = middle + 1;

}

if(value < array[middle]){

high = middle - 1;

}

}

return -1; //上面循環完畢,說明未找到,返回-1

}

}

2.運行結果

相關焦點

  • Java字符串地查找操作
    代碼如下:/** * @Title: StringSearchSample.java * @Packageunit * @Description: Java基礎知識課程案例* @author編程訓練營 * @date* @versionV1.0 */ packageunit;
  • 使用Python和C語言實現二分法查找(折半查找)
    二分查找 叫折半查找,它對要查找的序列有兩個要求,一是該序列必須是有序的,二是該序列必須是順序存儲的。二分法查找算法的原理如下:1、 如果待查對象為空返回-1,表示查找不到目標元素2、 如果待查序列不為空,則將中間元素與要查找的目標元素進行匹配看是否相等,如果相等表示 查找成功,返回該中間元素的索引如果不相等再比較這兩個元素的大小
  • 如何使用java語言求一個正整數的平方根?(不使用庫函數)
    今天的這篇文章是我在刷算法題的時候遇到的,最簡單的方法是直接調用java裡面的Sqrt函數,不過有時候題目中會要求我們不能使用庫函數,所以在這裡我們自己定義Sqrt方法。最常見的思路有兩種,第一種是二分法,第二種是牛頓的微積分思想。
  • 跟我學java編程—Java邏輯運算符
    示例1:邏輯運算符在D盤Java目錄下,新建「LogicSample.java」文件。用記事本打開「LogicSample.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示邏輯運算符的用法。類似語句「bJudge = !
  • 世界排行第一的程式語言:java迎來25歲生日
    作為全球排名第一的程式語言,本周末Java將迎來 25 歲生日。Java起源於 1991 年的「 Oak」項目,由James Gosling領導。面向對象的Java以其「一次編寫,隨處運行」的可移植性而聞名,因為Java虛擬機支持多種硬體平臺和作業系統以及Java applet可以從網頁上運行。
  • 算法分析——二分法查詢
    題目 假設在一個已經排好序的有序序列(N個元素,升序排列),使用二分法進行查詢(使用遞歸實現) 原文收錄在 公眾號 慕陽源碼 感興趣或者有問題的小夥伴 聯繫我哦
  • Java學習必不可少的十大網站
    這是我為學習java的同學們準備的網站集合。這些網站提供新聞,常見問題或訪談問題的答案,精彩的講座等。質量是好的網站的關鍵因素。我認為它們都具有最高的質量。在下文中,我還將分享如何使用這些網站進行學習或娛樂。1.
  • 提升java編程性能優化知識 程式設計師必看這幾點
    對於學習java的學子也是如此,那麼java程式設計師如何提高編程性能呢,有哪些小知識或者技巧呢,怎麼樣才能在編程性能優化方面有所提升呢?  1.儘量在合適的場合使用單例  使用單例可以減輕加載的負擔,縮短加載的時間,提高加載的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面:
  • 面試手撕算法系列:二分法
    最近春招開始了,面試面著面著一言不合就開始手撕代碼手撕就手撕,接下來我打算寫幾個專題講講面試中手撕的常見題目 這些都是LeetCode上有的題目 手撕無非就是 樹、鍊表、二分、字符串這些常用的數據結構二分法查找,也稱為折半法,是一種在有序數組中查找特定元素的搜索算法。
  • 跟我學java編程—認識java語言的字符類型
    用記事本打開「CharSample.java」文件,輸入以下代碼:編譯「CharSample.java」文件,在命令行窗口輸入「javac CharSample.java」並執行命令,編譯通過後,在命令行窗口輸入「java CharSample」運行Java程序,命令行窗口顯示如下信息:
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    TIOBE編程排行榜根據全球工程師、課程和搜尋引擎數量為指數得出,在一定程度上反映了程式語言的發展趨勢。其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • 跟我學java編程—認識java的整數類型
    示例2:int類型的溢出在D盤Java目錄下,新建「OverFlow.java」文件。用記事本打開「OverFlow.java」文件,輸入以下代碼:編譯「OverFlow.java」文件,在命令行窗口輸入「javac OverFlow.java」並執行命令,編譯器顯示如下信息:編譯器給出過大的整數錯誤信息,num的數值明顯超出的int所能表示的最大值。
  • 算法競賽小專題系列(1):二分法、三分法
    整數二分模板2.1 基本形式  先看一個簡單問題:在有序數列a[]中查找某個數x;如果數列中沒有x,找它的後繼。通過這個問題,給出二分法的基本代碼。  如果有x,找第一個x的位置;如果沒有x,找比x大的第一個數的位置。
  • Java編程中基礎反射詳細解析
    類加載指的是將類的class文件讀入內存中,並為之創建一個 java.lang.Class對象,也就是說程序使用任何類的時候,都會為其創建一個class對象。類加載器負責加載所有的類,系統為所有加載到內存中的類生成一個java.lang.Class 的實例。
  • 二分法
    二分法是什麼呢?百度上的定義是:「對於區間[a,b]上連續不斷且f(a)·f(b)<0的函數y=f(x),通過不斷地把函數f(x)的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。」        這個定義比較複雜,我們把它分成幾部分來看。
  • 數據結構java面試題及答案
    它也是面試最喜歡的問題之一,在代碼面試中你會經常聽到很多關於數組的問題,例如,數組的反轉、數組的排序或者查找數組中的一個元素。數組結構的一個關鍵優點是在知道索引的情況能夠以O(1)的複雜度找到一個元素。但是增加或者刪除一個元素是很慢的,因為一旦創建了一個數組,你就不能改變它的大小了。
  • 程式設計師挑戰:如何讓一個技術小白搞懂二分法檢索?
    我敢打賭,即使他們沒有任何技術背景,最後他們也能開發出一個二分法檢索的算法,並且理解這個概念。傳統意義上的二分法檢索問題以下是Geeks for Geeks上給出的二分法檢索的定義:「給定一個包含n個元素的排序數組arr[],編寫一個函數來搜索arr[]中的給定元素x。」即使我是軟體工程專業,但讀到這裡時依然會頭疼。
  • 適合Java新手的開源項目集合——在 GitHub 學編程
    興趣是最好的老師,HelloGitHub 就是幫你找到編程的樂趣。先 clone 把源碼下載後,可以通過 java -jar FlappyBird.jar 直接運行,也可以通過運行源碼中的 GameApp:main 方法來啟動整個遊戲。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    Java 反射在Java的開發環境中,運行java文件需要使用:java xx.java 命令,運行java命令後「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程類的加載過程中也會對字節碼文件進行驗證