数据结构之折半查找

数据结构之折半查找

/**
* 思想: 折半查找的查找的过程是:先确定待查记录所在的范围,然后逐步缩小范围直到找到或者找不到该记录为止。
* 举例说明:例如:已知的9个数据元素的有序表(1,2,3,4,5,6,7,8,9),现要查找关键字为2的数据元素。
* 假设指针low和high分别指向待查元素的所在范围的下界和上界,指针mid指示区间的中间位置,即mid=[(low+high)/2].
* 在此例中,low=1,high=9,mid=5.
* 下面是查找的过程:
* 1,2,3,4,5,6,7,8,9
* ↑low ↑mid ↑high
* 由于2<5,所以high=mid-1,mid=(low + high) / 2=2,在这个有序表里的下标为2的数据元素是2,所以也就找到了2.
*/
package half;

public class half {

private int low = 0;
private int high = 0;
private int mid = 0;

/**
 * s为要查找的数,a[]是查询的范围
 * 
 * @param s
 * @param a
 */
public void half(int s, int a[]) {
    high = a.length - 1;
    mid = (low + high) / 2;
    System.err.println("low:" + low + "  mid:" + mid + "  high:" + high);
    if (s > a[high] || s < a[low]) {
        System.out.println("ERROR");
    } else {
        halfData(s, a);
    }
}

public void halfData(int s, int a[]) {

    if (s < a[this.mid]&&this.high-this.low>=0) {
        this.high = this.mid - 1;
        this.mid = (low + high) / 2;
        System.err
                .println("low:" + low + "  mid:" + mid + "  high:" + high);
        halfData(s, a);
    }else if (s > a[this.mid]&&this.high-this.low>=0) {
        this.low = this.mid + 1;
        this.mid = (low + high) / 2;
        System.err
                .println("low:" + low + "  mid:" + mid + "  high:" + high);
        halfData(s, a);
    } else if(s == a[this.mid]&&this.high-this.low>=0){
        System.out.println("数的下标:"+this.mid);
    }else if(this.high-this.low<0){
        System.out.println("没有找到!");
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    half half = new half();
    int a[] = { 0, 1, 2, 5, 6, 7, 8, 9 };
    half.half(4, a);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值