二分(拆半)查找代码模板(C/C++/Java/Python多版本)需要先看清适用场景和关键步骤,避免只记结论却忽略实际限制。
二分(拆半)查找是一种在有序数组中快速查找目标值的高效算法。它通过不断将搜索范围减半来实现:首先与数组中间元素比较,如果目标值等于中间元素则找到;如果目标值较小,则在左半部分继续查找;如果目标值较大,则在右半部分继续查找。如此重复,直到找到目标值或搜索范围为空。

1. C/C++版代码:
#include <stdio.h>// 二分查找函数int binarySearch(int arr[], int size, int target){ int left = 0; int right = size - 1; while (left <= right) { int mid = left + (right - left) / 2; // 防止溢出 if (arr[mid] == target) { return mid; // 找到目标值,返回索引 } else if (arr[mid] < target) { left = mid + 1; // 向右半部分继续查找 } else { right = mid - 1; // 向左半部分继续查找 } } return -1; // 如果未找到目标值,返回-1}2. Java版代码:
import java.util.Scanner;public class Main { // 二分查找函数 public static int binarySearch(int[] arr, int size, int target) { int left = 0; int right = size - 1; while (left <= right) { int mid = left + (right - left) / 2; // 防止溢出 if (arr[mid] == target) { return mid; // 找到目标值,返回索引 } else if (arr[mid] < target) { left = mid + 1; // 向右半部分继续查找 } else { right = mid - 1; // 向左半部分继续查找 } } return -1; // 如果未找到目标值,返回-1 } public static void main(String[] args) { int r; int[] a = {12, 34, 35, 54, 85, 167, 265, 343, 399, 584}; r = binarySearch(a, 10, 584); System.out.println(r); }}3. Python版代码:
def binary_search(arr, size, target): left = 0 right = size - 1 while left <= right: mid = left + (right - left) // 2 # 防止溢出 if arr[mid] == target: return mid # 找到目标值,返回索引 elif arr[mid] < target: left = mid + 1 # 向右半部分继续查找 else: right = mid - 1 # 向左半部分继续查找 return -1 # 如果未找到目标值,返回-1 if __name__ == "__main__": a = [12, 34, 35, 54, 85, 167, 265, 343, 399, 584] r = binary_search(a, len(a), 265) print(r)