二分搜尋法

更新於 發佈於 閱讀時間約 4 分鐘

前導

二分搜尋法(Binary Search)是一種 高效的搜尋演算法,適用於 已排序 的資料結構。 它的核心思想是 每次將搜尋範圍減半,直到找到目標值或範圍縮小到無法繼續搜尋。

演算法步驟

  1. 確認資料已排序(若未排序,需先排序)。
  2. 設定 左邊界 (low) 為 0,右邊界 (high) 為陣列長度 - 1
  3. 計算中間索引 (mid)
raw-image
  1. 比較 arr[mid]target
      • arr[mid] == target,則返回索引 mid(找到目標)。
      • arr[mid] > target,則 high = mid - 1(縮小到左半區間)。
      • arr[mid] < target,則 low = mid + 1(縮小到右半區間)。
  1. 重複第三步驟和第四步驟。
  2. low > high,表示目標值 不存在,返回 -1

程式碼

#include <stdio.h>

int binarySearch(int arr[], int size, int target) {
int low = 0, high = size - 1;

while (low <= high) {
int mid = low + (high - low) / 2;
printf("low = %d, high = %d, mid = %d, arr[mid] = %d\n", low, high, mid, arr[mid]);

if (arr[mid] == target) {
return mid; // 找到目標,返回索引
}
if (arr[mid] < target) {
low = mid + 1; // 搜尋右半部
} else {
high = mid - 1; // 搜尋左半部
}
}
return -1; // 找不到
}

int main() {
int arr[] = {2, 5, 8, 12, 16, 23, 38, 45, 56, 72}; // 已排序數列
int size = sizeof(arr) / sizeof(arr[0]);
int target = 23;

int result = binarySearch(arr, size, target);
if (result != -1) {
printf("找到 %d,索引位置為 %d\n", target, result);
} else {
printf("未找到 %d\n", target);
}

return 0;
}
  • 與 循序搜尋法 相比,二分搜尋法的效率大幅提升。
avatar-img
電資鼠 - 您的學習好夥伴
8會員
169內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!
循序搜尋法(Sequential Search)是一種最簡單的搜尋演算法,適用於線性結構。 它的基本概念是 逐一檢查每個元素,直到找到目標值或遍歷完整個結構。 本章節將會帶領讀者熟悉這個知識,並且用C語言實作。
歸併排序法 同樣是一種基於「分治法」(Divide and Conquer)的排序演算法,我們將逐步分析演算法的思維與流程,最後以程式碼實作出來。
本章節以清楚易懂的圖示呈現快速排序法的思維,並演示了如何用程式碼實作。
本章將介紹 謝耳排序法 (Shell Sort),這是一種 改良版的插入排序,透過分組排序 (Gap Sorting) 提升排序效率。與傳統插入排序不同,謝耳排序會先以較大間隔 (gap) 進行排序,逐步縮小間隔,最後進行標準插入排序,藉此減少資料移動次數並提升效能。
插入排序(Insertion Sort),它的概念類似於撲克牌整理,我們拿起一張牌並將它插入到已排序的牌堆中,使整堆牌仍然保持有序。 本章節將以淺顯易懂的方式快速帶領讀者掌握此演算法,並加上程式碼實作。
本章節我們將探討選擇排序法的運作流程,最後用程式碼實作。
循序搜尋法(Sequential Search)是一種最簡單的搜尋演算法,適用於線性結構。 它的基本概念是 逐一檢查每個元素,直到找到目標值或遍歷完整個結構。 本章節將會帶領讀者熟悉這個知識,並且用C語言實作。
歸併排序法 同樣是一種基於「分治法」(Divide and Conquer)的排序演算法,我們將逐步分析演算法的思維與流程,最後以程式碼實作出來。
本章節以清楚易懂的圖示呈現快速排序法的思維,並演示了如何用程式碼實作。
本章將介紹 謝耳排序法 (Shell Sort),這是一種 改良版的插入排序,透過分組排序 (Gap Sorting) 提升排序效率。與傳統插入排序不同,謝耳排序會先以較大間隔 (gap) 進行排序,逐步縮小間隔,最後進行標準插入排序,藉此減少資料移動次數並提升效能。
插入排序(Insertion Sort),它的概念類似於撲克牌整理,我們拿起一張牌並將它插入到已排序的牌堆中,使整堆牌仍然保持有序。 本章節將以淺顯易懂的方式快速帶領讀者掌握此演算法,並加上程式碼實作。
本章節我們將探討選擇排序法的運作流程,最後用程式碼實作。