查找

一、顺序查找

1.无哨兵

int SequentailSearch(StaticTable* Tbl, ElemenType k)
{
    int i;
    for (i = Tbl->Length; i > 0 && Element[i] != k; i--);//数组0元素不保存数据
    return i;//返回查找元数位置下标
}

2.有哨兵

int SequentailSearch(StaticTable* Tbl, ElemenType k)
{
    int i;
    Tbl->Element[0] = k;//建立哨兵
    for (i = Tbl->Length(); lement[i] != k; i--);
    return i;
}

二、二分查找

#define N 256
typedef struct list* List;
typedef int Position, ElementType; //定义类型
struct list{
    ElementType Element[N];        //数组0元素不保存数组
    Position Length;               //Length是最后一个数据的下标
};

 

注意:必须是数组存储、元素有序

int BinarySearch(List Tbl, ElemType K)
{//List 两个分量,一个是数组Element,一个是它的大小Length
    int left, right, mid, NoFound = -1;
    left = 1; right = Tbl->Length;//下标0不存数据
    while (left <= right)
    {
        mid = (left + right) / 2;
        if (K == Tbl->Element[mid])
            return mid;
        else if (Tbl->Element[mid] > k)
        {
            right = mid;
        }
        else
            left = mid;
    }
    return NoFound ;
}

 

posted @ 2021-11-09 00:39  Grit_L。  阅读(47)  评论(0编辑  收藏  举报