14、有序表的查找

/*
    1、建立顺序表
    2、对有序表进行二分查找
        a、初始化:设置指向n个元素的参数下标:low(指向最小的元素)、high(指向最大的元素)、mid(中间元素)=(low+hingh)/2
        b、比较(将要查找的key元素与s[mid].key元素进行对比):
            (1)key = s[mid].key,返回mid下标
            (2)key < s[mid].key,令high=mid-1,重新进行比较
            (3)key > s[mid].key,令low=mid+1,重新进行比较
    优点:效率提高,
    确定:必须是顺序表,并且可以比较大小
*/

#include <iostream>
#define MAXSIZE 100
using namespace std;
struct SSTable
{
    int key[MAXSIZE]; // SSTable中的元素
    int length;       // SSTable的元素长度
};
// 初始化顺序表(建立顺序表)
void InitSSTable(SSTable &s);

// 二分查找
int Search_Bin(SSTable &s, int key);

int main()
{
    SSTable s;
    InitSSTable(s);

    cout << Search_Bin(s,20) << endl;

    return 0;
}
// 初始化顺序表(建立顺序表)
void InitSSTable(SSTable &s)
{
    s.key[1] = 10;
    s.key[2] = 20;
    s.key[3] = 30;
    s.length = 3;
}
// 二分查找
int Search_Bin(SSTable &s, int key)
{
    // 2、对有序表进行二分查找 a、初始化:设置指向n个元素的参数下标:low(指向最小的元素)、high(指向最大的元素)、mid(中间元素) =(low + hingh) / 2 b、比较(将要查找的key元素与s[mid].key元素进行对比):
    int low = 1, high = s.length, mid = (low + high) / 2;
    while (low < high)
    {
        // (1)key = s[mid].key,返回mid下标
        //(2)key < s[mid].key, 令high = mid - 1,重新进行比较
        //(3)key > s[mid].key, 令low = mid + 1,重新进行比较 
        if (key < s.key[mid])
            high = mid - 1;
        else if (key > s.key[mid])
           low = mid + 1;
        else
            return mid;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值