算法设计与分析——顺序查找(Java)

【问题】顺序查找( sequential search )是指在查找集合中依次查找值为 k 的元素,若查找成功,则给出该元素在查找集合中的位置;若查找失败,则给出失败信息。

【想法】为了避免在查找过程中每一次比较前都要判断查找位置是否越界,可以设置观察哨( sentinel ),即将待查值放在查找方向的“尽头”处,则比较位置 i 至多移动到下标 0 处。查找过程如图所示。

【算法分析】算法SeqSearch的基本语句是 r [ i ] ! = k,设 pi 表示查找第 i 个元素的概率,等概率情况下,基本语句的执行次数为:

       顺序查找算法和其改进算法的时间复杂性都是 O(n),而系数相差一倍。实验表明,改进算法在表长大于1000时,进行次顺序查找的时间几乎减少一半。

【算法实现】顺序查找算法用JAVA语言描述如下:

public class SequentialSearch {
    static int SeqSearch1(int r[], int n, int k)            //数组r[1] ~ r[n]存放查找集合
    {
        int i = n;
        while (i > 0 && r[i] != k)                 //检测比较位置是否越界
            i--;
        return i;
    }
    static int SeqSearch2(int r[], int n, int k)  //数组r[1] ~ r[n]存放查找集合
    {
        int i = n;            //从数组高端开始找
        r[0] = k;             //设置哨兵
        while (r[i] != k)               //不用检测比较位置是否越界
            i--;
        return i;
    }
    public static void main(String args[]){
        int r[]= {0,1,5,3,9,4};
        int k1 = SeqSearch1(r,5,3);
        int k2 = SeqSearch2(r,5,3);
        System.out.println(k1);
        System.out.println(k2);
    }
}

运行结果如下:

from:算法设计与分析(第2版)——王红梅 胡明 编著——清华大学出版社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值