📜  C |数组|问题9(1)

📅  最后修改于: 2023-12-03 15:29:44.098000             🧑  作者: Mango

C语言 数组问题9

问题描述

在一个排好序的数组中(升序或降序),查找给定元素的下标。

解决方案

可以采用二分查找的算法,使用递归或循环实现。

非递归实现
int BinarySearch(int arr[], int left, int right, int target) {
    int mid;
    while(left <= right) {
        mid = (left + right) / 2;
        if(arr[mid] == target) {
            return mid;
        } else if(arr[mid] > target) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return -1; //表示未找到
}
递归实现
int BinarySearch(int arr[], int left, int right, int target) {
    if(left > right) {
        return -1; //表示未找到
    }
    int mid = (left + right) / 2;
    if(arr[mid] == target) {
        return mid;
    } else if(arr[mid] > target) {
        return BinarySearch(arr, left, mid - 1, target);
    } else {
        return BinarySearch(arr, mid + 1, right, target);
    }
}
总结

时间复杂度为 O(log n),性能较好。注意要求输入的数组必须是有序的。