二分查找和插值查找是两种常见的查找算法,它们的主要区别在于查找的中间位置的计算方式不同。

  1. 二分查找:
    • 中间位置的计算方式:使用简单的平均值计算中间位置,即 mid = (low + high) / 2。
    • 适用范围:适用于有序数组。
    • 实现代码:
public int binarySearch(int[] array, int target) {
    int low = 0;
    int high = array.length - 1;

    while (low <= high) {
        int mid = (low + high) / 2;
        if (array[mid] == target) {
            return mid;
        } else if (array[mid] < target) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }

    return -1; // 表示未找到
}
  1. 插值查找:
    • 中间位置的计算方式:根据查找值的大小,使用插值公式计算中间位置,即 mid = low + (target - array[low]) / (array[high] - array[low]) * (high - low)。
    • 适用范围:适用于有序数组,且分布比较均匀的情况。
    • 实现代码:
public int interpolationSearch(int[] array, int target) {
    int low = 0;
    int high = array.length - 1;

    while (low <= high && target >= array[low] && target <= array[high]) {
        int mid = low + (target - array[low]) / (array[high] - array[low]) * (high - low);
        if (array[mid] == target) {
            return mid;
        } else if (array[mid] < target) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }

    return -1; // 表示未找到
}

注意:以上代码都是基于有序数组进行查找,如果是无序数组,需要先进行排序操作。另外,插值查找在某些情况下可能会比较快,但对于分布不均匀的情况,二分查找可能更合适。

二分查找 vs 插值查找:算法比较及 Java 代码实现

原文地址: http://www.cveoy.top/t/topic/paZM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录