静态查找方法(顺序查找与二分查找)

/*静态查找的几种方法*/
#include <stdio.h>
#define MaxSize 20

typedef struct LNode *List;
struct LNode{
    ElementType Data[MaxSize];
    int length;
}; 

/*顺序查找(Sequential Search),采用了建立哨兵的查找思想,最好查找复杂度O(1),最坏为O(n),平均查找复杂度为O(n/2)*/
int SequentialSearch(List Tb1,ElementType K)
{
    /*在ElementType[1]~ElementType[n]中查找关键字为K的数据元素*/
    int i;
    Tb1->Data[0]=K; /*建立哨兵*/ 
    for(i=Tb1->length;Tb1->Data[i]!=K;i--);
    return i; /*查找成功返回元素所在单元的下标;不成功则返回0*/

 } 

 /*二分查找Binary Search,时间复杂度为O(logN)*/ 
/*前提n个数据元素的关键字满足有序(排序至少要花费O(nlogn)的时间),并且是连续存放(数组)*/ 
/*
   二分查找判定树:
     判定树上的每个结点需要查找的次数刚好等于该结点所在的层数;
     查找成功时查找次数不会超过判定树的深度
     n个结点的判定树的深度为[log2n]+1 
     平均成功查找次数ASL=(每层结点数*层数之和)/总的结点数 =log2(n+1)-1

     二分查找最坏情况和平均情况相当接近
     二分查找插入删除都必须移动大量的结点,二分查找适合那种一经建立就很少改动,而又经常需要查找的线性表 
     对于那些查找少而又经常需要改动的线性表,可以采用链表作为存储结构,经行顺序查找,链表无法实现二分查找 
*/ 

/*假设有13个数据元素,按照关键字由小到大顺序存放,二分查找关键字为444的数据元素过程*/ 
int BinarySearch(List Tbl,ElementType K)
{   /*在表Tbl中查找关键字为K的数据元素*/ 
    int left,right,NotFound=-1; 
    left=1;  //初始左边界 
    right=Tbl->length;  //初始有边界 
    while(left<=right)
    {
        mid=*(left+right)/2; //计算中间元素坐标 
        if(K<Tbl->Data[mid]) right=mid-1; //调整右边界 
        else if(K>Tbl->Data[mid]) left=mid+1; //调整左边界 
        else return mid;  //查找成功,返回数据元素下标 
    }
    return NotFound  //查找不成功,返回-1 
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值