数据结构线性表的查找-顺序查找-二分查找-分块查找

        顺序查找是最基本的查找算法,从表的开头或结尾依次对表中的元素进行对比,直到成功找到关键字或是将表中的所有元素对比一遍。

        顺序查找的平均查找长度为\frac{n+1}{2}

        时间复杂度为O(n)

1 头文件

#ifndef HEAD_H
#define HEAD_H

#include<iostream>
#include<string.h>
typedef int Keytype;
typedef int otherdata;

typedef struct {
    Keytype key;
    otherdata otherinfo;
}ElemType;

typedef struct{     //顺序表
    ElemType *R;    // 存储空间的基地址
    int length;     //当前长度
}SSTable ;          //SStable ST
//假设元素从ST.R[1]开始顺序向后存放数据

#endif // HEAD_H

2 实现方法

#include"head.h"

using namespace std;

//顺序查找
int Search_seq(SSTable ST,Keytype key){
    //在顺序表中查找关键字等于key的值
    for(int i = ST.length;i>=1;i--){
        if(ST.R[i].key==key)return i;
    }
    return 0;
}

//设置检视哨的顺序查找
int Search_seq_key(SSTable ST,Keytype key){
    //设置一个哨兵
    ST.R[0].key = key;
    int i;
    for(i = ST.length;ST.R[i].key!= key;--i)
    return i;
}

//折半查找(Binary Search)
int Search_Bin(SSTable ST,Keytype key){
    //置查找区间
    int low = 1;
    int high = ST.length;
    while(low<=high)
    {
        int mid = (low+high)/2;
        if(key == ST.R[mid].key)return mid;
        else if(key<ST.R[mid].key)high = mid-1;
        else if(key>ST.R[mid].key)low = mid +1;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值