查找算法 折半查找算法

来源:互联网 发布:ssl smtp 端口 编辑:程序博客网 时间:2024/06/05 04:33
/** * 折半查找算法 Binary Search * @param a 一个有序的集合(本次为由小到大) * @param x 需要查询的值 *     ps: 首先使用折半算法的时候 集合必须是有序的 *     eg:         a[1,3,5,7,9]        x  3 *                  a           mid      low        height *               [1,3,5,7,9]     2        0           1 *               [1,3]           0        1           1 *               [3]             1        -           - * 最终返回1 也就是3在集合的索引是1 * 备注:由以上分析不难得出 若集合中存在该值 则返回的是程序第一次查到该值所在的索引 *          若 该集合出现重复的数据 可能返回的不是其在集合的最小索引 * 建议:使用折半查找算法 使用的集合是有序且值不重复 结果则是最精准的 若有序但存在重复值 会存在误差 * */public static int binarySearch(int[] a, int x) {    int low = 0, height = a.length - 1;    while (low <= height) {        int mid = (low + height) / 2;        if (a[mid] > x) {            height = mid - 1;        } else if (a[mid] < x) {            low = mid + 1;        } else {            return mid;        }    }    return -1;}
0 0
原创粉丝点击