二分查找,递归和非递归

来源:互联网 发布:阿里云怎么退款 编辑:程序博客网 时间:2024/05/19 23:12

前言:对于排好序的关键字的查找,通常使用二分查找,时间复杂度为O(logn)

1.思想

  • 设数组区间为low到high,对于目标数,先查看数组中间元素,及下标为(low+high)/2的元素是否匹配
  • 若是则返回,若目标元素较小,则在low到high-1区间查找
  • 若目标元素较大,则在low+1到high区间查找

2.代码

public class BinarySearch {    public static void main(String[] args) {        int[] data = {2,4,5,6,8,9,12,54,564};        System.out.println(binarySearch(data, 2));    }    //iterative    public static int binarySearch(int[] data, int target) {        int low = 0, high = data.length-1;        int mid;        while (low <= high) {            mid = (low + high) / 2;            if (data[mid] == target) {                return mid;            }            else if (target < data[mid]) {                high = mid - 1;            }            else {                low = mid + 1;            }        }        return -1;    }    //recursive    public static int binarySearch(int[] data, int low, int high, int target) {        if (low <= high) {            int mid = (low + high) / 2;            if (target == data[mid]) {                return mid;            }            else if (target < data[mid]) {                return binarySearch(data, low, mid-1, target);            }            else {                return binarySearch(data, mid+1, high, target);            }        }        return -1;    }}
0 0
原创粉丝点击