数据结构折半查找例题_8.2 基于线性表的查找法(1)

e1fdd1fc8443f6e91bf2557ccfded010.png

返回目录:

Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com
e17fd1d588575e953fe46c97403ee91a.png

具有顺序查找法折半查找法分块查找法三种

8.2.1 顺序查找法

顺序查找法的特点是:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。
存储结构通常为顺序结构或者链式结构

算法思想

在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字。从表的另一端开始查找,如果在“监视哨”找到要查找元素的关键字,返回失败信息,否则返回相应下标。

算法分析

用平均查找长度分析顺序查找算法的性能。
假设列表长度为n,那么查找第i个数据元素时需进行n-i+1次比较,即Ci=n-i+1。又假设查找每个数据元素的概率相等,即Pi=1/n,则顺序查找算法的平均查找长度为:

#include <iostream>
using namespace std;

#define LIST_SIZE 50//顺序表最大长度
int RecordList[LIST_SIZE];//存储顺序表的数组
int len;//定义待查找顺序表的长度
int key;//定义待查找的元素

/*在顺序表RecordList中查找其关键字等于key的元素,若找到,则函数值为该元素在表中的位置,否则为0*/
int SeqSearch(){//设置监视哨的顺序查找法
    RecordList[0] = key;//设置监视哨
    int i = len;
    while(RecordList[i]!=key) i--;
    return i;
}
int SeqSearch(){//不设置监视哨的顺序查找法
    int i = len;
    while(i>=1 && RecordList[i]!=key) i--;
    if(i>=1) return i;
    else return 0;
}

int main()
{
    cout << "输入待查找顺序表的长度:";
    cin >> len;//输入长度
    cout << "依次输入顺序表元素(整型):";
    for(int i=1;i<=len;++i){//输入顺序表
        cin >> RecordList[i];
    }
    cout << "输入待查找的元素:";
    cin >> key;
    cout << endl << "待查找元素在顺序表中的位置:";
    cout << SeqSearch() << endl;
    return 0;
}

返回目录:

Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com
e17fd1d588575e953fe46c97403ee91a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值