数据结构————折半查找

折半查找作为查找操作中时间复杂度很低的一种 (只有对数阶)

它的使用有前提条件:数列必须以升序或降序排列

首先定义1个数列:
 

typedef struct 
{
   int *val;
   int length;
} SSTable;

初始化函数:


#define maxsize 16  //自行定义数列长度

void Create_S(SSTable &s)
{
  s.val=new int[maxsize+1];
  if(!s.val)
    {
     cout<<"创建失败"<<endl;
     exit(1);
    }
  s.length=maxsize;
  for(int i=1;i<=s.length;i++)  //s.val[0]作为哨兵,方便后续操作
         cin>>s.val[i];
}

 查找主体部分

#include <iostream>
using namespace std;
int main()
{
  SSTable s; 
  Create_S(s);
  int low=1,high=s.length;
  int mid=(low+high)/2;
  while(low<=high)
  {
    if(key==s.val[mid]) return mid;
    else if(key>s.val[mid]) 
            {
               low=mid+1;
               mid=(low+high)/2; 
            }
    else //  key<s.val[mid]
        {
             high=mid-1;mid=(low+high)/2;
        }
  }
  cout<<"can not find"<<endl;
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值