C语言中有关静态查找

1.顺序表的查找,代码如下:

#define MaxSize 100

typedef struct{
    int key;
}DataType;

typedef struct{
    DataType list[MaxSize];
    int length;
}SSTable;

//顺序表的查找算法如下
int SeqSearch(SSTable S, DataType x)
{
    int i = S.length;
    S.list[0] = x.key;//设置了监视哨
    while(S.list[i].key != x.key)
        i--;
    return i;
}

这里设置了监视哨,主要作用就是防止数组越界,也就是说,让关键字与数组的最后一个元素进行匹配,依次与前一个元素进行匹配,最后总能匹配的到,如果匹配的最后结果 i 等于0。说明,匹配失败,没有查找到元素。


2.有序顺序表的查找

有两种方法:1.顺序查找    2.折半查找

这里主要记录折半查找,又称二分查找,这种查找要求待查找的元素序列必须是从小到大的有序排列。


中心思想:折半查找,将待查找的元素与表中间的元素进行比较,如果两者之间相等,说明查找成功,否则利用中间的位置将表分成两部分;如果待查找元素小于中间位置的元素值,则继续与前一个字表的中间位置进行比较,否则与后一个子表的中间位置元素进行比较;不断重复以上动作。知道找到与待查找元素相等的元素,表明查找成功;如果子表变成空表,说明查找失败。

代码如下:

int BinarySearch(SSTable S, DataType x)
{
    int low,high,mid;
    low = 0;
    high = S.lenth -1 ;  //设定查找元素的上下界
    while(low <= high)
    {
        mid = (low + high)/2;
        if(S.list[mid].key == x.key)
            return mid+1;
        else if(S.list[mid].key <= x.key)//如果中间元素小于关键字,修改low指针
            low = mid + 1;
        else if(S.list[mid].key > x.key)//如果中间的元素大于关键字,修改high指针
            high = mid -1;
    }
    return 0;
}


结论就是:如果表中有N个元素,折半查找成功时,至多需要比较的次数为(log以2为底n的对数+1)。【log 2/ n】其中向下取整。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做个自由的人

随缘吧打赏与否还是会坚持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值