二分查找算法

提到查找算法一般都会想到二分查找算法,而且面试官也喜欢问二分查找算法。

1、二分查找算法的基本条件是有序数组;

2、二分查找的主要思路就是设定两个指针start和end分别指向数组元素的收尾两端,然后比较数组中间结点arry[mid]和待查找元素x。如果待查找元素x小于中间元素,那么表明x在数组的前半段,那么将end=mid-1,如果x大于中间元素,那么表明该元素在数组的后半段,将start=mid+1;如果中间元素等于待查找元素x,那么返回mid的值。

3、二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。

一般采用递归调用。

核心代码:

package com.company;

/**
 * Created by wuguangzu on 14-10-4.
 */
public class BinarySearchTest {
    //采用while循环,返回查找值
    int binarySearch(int arr[], int x){
        int start = 0;
        int end = arr.length-1;
        int mid;

        while (start <= end){
            mid = (start + end)/2;
            if (x < mid){
                end = mid-1;
            }else if(x > mid){
                start = mid+1;
            }else {
                return mid;
            }
        }
        return -1;//错误
    }
    //采用递归调用,返回查找值得索引
    int binarySearchRecursive(int arr[], int x, int start, int end){
        if (end < start) return -1;//错误
        int mid = (start + end)/2;
        if (arr[mid] < x){
            return binarySearchRecursive(arr, x, mid+1, end);
        }else if (arr[mid] > x){
            return binarySearchRecursive(arr, x, start, mid-1);
        }else {
            return mid;
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值