目錄
BinarySearch() 方法在 Java 中如何運作?
在 Java 中實作 BinarySearch() 的範例
範例#2
結論
推薦文章
首頁 Java java教程 Java 中的二分查找(​​)

Java 中的二分查找(​​)

Aug 30, 2024 pm 04:12 PM
java

在 Java 中,binarySearch() 是一種幫助使用二分搜尋演算法從多個元素中搜尋特定鍵元素的方法。為了執行此操作,元素必須按升序排序。如果沒有排序,可以使用Arrays.sort(arr)方法進行排序。否則,結果被認為是未定義的。  與線性搜尋相比,二分搜尋被認為更快。因此,二分查找的時間複雜度為 O(log n)。此外,binarySearch() 方法可以從 java.util.Arrays 套件中實例化。有關 binarySearch() 方法的更多詳細資訊將在以下部分中討論。

文法:

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

public static int binarySearch(Object[] a, Object key)
登入後複製

這裡參數a和key分別是要找的陣列和要找的值。

binarySearch() 方法傳回正在搜尋的關鍵元素的索引。在未找到關鍵元素的情況下,將傳回原本要插入的關鍵元素的插入點。如果搜尋的關鍵元素與陣列中的其他元素不可比較,則會拋出稱為 ClassCastException 的例外。

BinarySearch() 方法在 Java 中如何運作?

讓我們看看這個方法在 Java 中是如何運作的:

  1. 假設k是要搜尋的關鍵元素。將 k 與陣列的中間元素進行比較。
  2. 如果 k 與中間位置的元素匹配,則必須傳回中間索引。
  3. 否則,如果k比中間位置的元素高,那麼k只能在中間元素的右邊找到。
  4. 否則可以在中間元素的左邊找到。

在 Java 中實作 BinarySearch() 的範例

以下是一些使用 BinarySearch() 方法的程式範例。

範例#1

代碼:

import java.util.Arrays;
public class BinarySearchExample
{
public static void main(String[] args)
{
//create a byte array
byte ba[] = {05, 10, 15, 20, 25, 30};
//create a character array
char ca[] = {'a', 'n', 's', 'p', 'v', 'i', 'd'};
//create an integer array
int ia[] = { 10, 20, 15, 22, 35};
//create a double array
double da[] = {10.1 , 15.34 , 22.25, 13.5};
//create a float array
float fa[] = {13.2f, 25.1f , 22.2f , 43.5f };
//sort all the arrays that created above
Arrays.sort(ba);
Arrays.sort(ca);
Arrays.sort(ia);
Arrays.sort(da);
Arrays.sort(fa);
//enter the key elements that has to be searched in the array
byte bKey = 15;
char cKey = 'i';
int iKey = 22;
double dKey = 15.34;
float fKey = 22.2f;
System.out.println("Element "+ bKey + " is found at the position of " + Arrays.binarySearch(ba,bKey) );
System.out.println("Element "+ cKey + " is found at the position of " + Arrays.binarySearch(ca,cKey) );
System.out.println("Element "+ iKey + " is found at the position of " + Arrays.binarySearch(ia,iKey) );
System.out.println("Element "+ dKey + " is found at the position of " + Arrays.binarySearch(da,dKey) );
System.out.println("Element "+ fKey + " is found at the position of " + Arrays.binarySearch(fa,fKey) );
}
}
登入後複製

輸出:

Java 中的二分查找(​​)

上述程式中使用 Arrays 對陣列進行排序後,建立了字元、整數、浮點、雙精確度和位元組等不同類型的陣列。 Sort() 方法中宣告了需要在陣列中搜尋的元素。然後使用 Arrays.binarySearch() 方法列印搜尋到的元素的索引。

假設給定一個陣列中不存在的關鍵元素;輸出是什麼?

為了找到這一點,讓我們更改關鍵元素的程式碼,如下所示。

位元組 bKey = 15;
char cKey = ‘i’;
int iKey = 89;
雙 dKey = 15.34;
浮動 fKey = 22.2f;

也就是說,iKey=89 不存在於陣列中,那麼輸出將顯示如下。

Java 中的二分查找(​​)

我們可以看到,位置列印為-6。這是因為,如果搜尋某個元素但未找到,則如果該元素存在,則將傳回索引的負值。即,int ia[] = { 10, 20, 15, 22, 35} 是給定的陣列。如果存在 89,則數組將為 int ia[] = { 10, 20, 15, 22, 35, 89};

可以清楚地看到索引將為 6。由於原始數組中不存在該索引,因此在上面的輸出中傳回了該特定索引的負值。

範例#2

二分查找也可以藉助遞歸來完成,如下圖所示。

代碼:

//sample class
class BinarySearchExample{
public static int binarySearch(int a[], int f, int l, int k){
//if last element is greater than or equal to first element
if (l>=f)
{
//find the mid
int m = f + (l - f)/2;
//if the key element that is searching is found in middle position, return mid position
if (a[m] == k)
{
return m;
}
//if key element is less than element in middle position, search the left <u>subarray</u>
if (a[m] > k){
return binarySearch(a, f, m-1, k);
}
//if key element is greater than the element in middle position, search the right <u>subarray</u>
else{
return binarySearch(a, m+1, l, k);
}
}
return -1;
}
public static void main(String args[]){
//initialise the array
int a[] = {34,45,54,68,79};
int k = 68;
int l = a.length-1;
//store the position in variable res
int res = binarySearch(a,0,l,k);
if (res == -1)
System.out.println("Sorry!! Can't find the element....!");
else
System.out.println("Element is found at the position: "+res);
}
}
登入後複製

輸出:

Java 中的二分查找(​​)

在上面的程式中,首先建立了一個數組,並聲明了要尋找的元素。使用binarySearch()方法,可以找出關鍵元素的位置。  假設沒有找到該元素,則會列印一則訊息「Sorry !!!Can't find the element」。

結論

binarySearch() 是一種 Java 方法,可協助使用二分搜尋演算法在陣列中的多個可用元素中尋找特定的關鍵元素。本文檔詳細解釋了此方法的工作原理和範例。

推薦文章

這是 Java 中 BinarySearch() 的指南。在這裡,我們討論 BinarySearch() 方法在 Java 中的工作原理以及程式碼實作的範例。您也可以閱讀我們其他推薦的文章以了解更多資訊 –

  1. JavaScript 數學函數
  2. Java 中的版面配置
  3. Java 編譯器
  4. Java 中的合併排序

以上是Java 中的二分查找(​​)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
作曲家:通過AI的幫助開發PHP 作曲家:通過AI的幫助開發PHP Apr 29, 2025 am 12:27 AM

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

如何使用MySQL的函數進行數據處理和計算 如何使用MySQL的函數進行數據處理和計算 Apr 29, 2025 pm 04:21 PM

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

H5:HTML5的關鍵改進 H5:HTML5的關鍵改進 Apr 28, 2025 am 12:26 AM

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。

怎樣在C  中使用type traits? 怎樣在C 中使用type traits? Apr 28, 2025 pm 08:18 PM

typetraits在C 中用於編譯時類型檢查和操作,提升代碼的靈活性和類型安全性。 1)通過std::is_integral和std::is_floating_point等進行類型判斷,實現高效的類型檢查和輸出。 2)使用std::is_trivially_copyable優化vector拷貝,根據類型選擇不同的拷貝策略。 3)注意編譯時決策、類型安全、性能優化和代碼複雜性,合理使用typetraits可以大大提升代碼質量。

MySQL的字符集和排序規則如何配置 MySQL的字符集和排序規則如何配置 Apr 29, 2025 pm 04:06 PM

在MySQL中配置字符集和排序規則的方法包括:1.設置服務器級別的字符集和排序規則:SETNAMES'utf8';SETCHARACTERSETutf8;SETCOLLATION_CONNECTION='utf8_general_ci';2.創建使用特定字符集和排序規則的數據庫:CREATEDATABASEexample_dbCHARACTERSETutf8COLLATEutf8_general_ci;3.創建表時指定字符集和排序規則:CREATETABLEexample_table(idINT

如何在MySQL中重命名數據庫 如何在MySQL中重命名數據庫 Apr 29, 2025 pm 04:00 PM

MySQL中重命名數據庫需要通過間接方法實現。步驟如下:1.創建新數據庫;2.使用mysqldump導出舊數據庫;3.將數據導入新數據庫;4.刪除舊數據庫。

如何在C  中實現單例模式? 如何在C 中實現單例模式? Apr 28, 2025 pm 10:03 PM

在C 中實現單例模式可以通過靜態成員變量和靜態成員函數來確保類只有一個實例。具體步驟包括:1.使用私有構造函數和刪除拷貝構造函數及賦值操作符,防止外部直接實例化。 2.通過靜態方法getInstance提供全局訪問點,確保只創建一個實例。 3.為了線程安全,可以使用雙重檢查鎖定模式。 4.使用智能指針如std::shared_ptr來避免內存洩漏。 5.對於高性能需求,可以使用靜態局部變量實現。需要注意的是,單例模式可能導致全局狀態的濫用,建議謹慎使用並考慮替代方案。

為什麼Java代碼可以在不同的操作系統上運行,而無需修改? 為什麼Java代碼可以在不同的操作系統上運行,而無需修改? Apr 28, 2025 am 12:14 AM

Java代碼可以在不同操作系統上無需修改即可運行,這是因為Java的“一次編寫,到處運行”哲學,由Java虛擬機(JVM)實現。 JVM作為編譯後的Java字節碼與操作系統之間的中介,將字節碼翻譯成特定機器指令,確保程序在任何安裝了JVM的平台上都能獨立運行。

See all articles