数据结构-二分查找

二分查找:

题目:从线性结构列表【12,31,55,89,101,5】中查找出输入的X数值在列表中的下标(注意:此处第一个元素的下标为1)

评分结果:

Submit TimeStatusScoreProblemCompilerRun TimeUser
4/1/2019, 22:54:47

Accepted

2001-复杂度3C (gcc)22 msBrianLi
CaseHintResultRun TimeMemory
0sample1 等价Accepted3 ms384 KB
1sample2 等价,但NotFound重新定义Accepted1 ms256 KB
2奇数个,正中间找到,MAXSIZE重新定义Accepted2 ms256 KB
3偶数个,正中间找到Accepted2 ms256 KB
4大数据,在头部找到Accepted22 ms640 KB
5大数据,在尾部找到Accepted22 ms512 KB
6大数据,找不到Accepted22 ms680 KB

代码实现:



#include<iostream>
using namespace std;

#define MAXSIZE 10
#define NotFound 0

typedef int ElementType;
typedef int Position;

typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

Position BinarySearch( List L, ElementType X );

int main()
{
    List L;
    ElementType X;
    Position P;

    LNode LNode1;
    L = &LNode1;

    //定义线性结构表内容,默认将第一个元素的下标设为1
    L->Data[1] = 12;
    L->Data[2] = 31;
    L->Data[3] = 55;
    L->Data[4] = 89;
    L->Data[5] = 101;
    L->Last = 5;

    //输入查找数字X,有则返回下标,无则返回iui0
    scanf("%d", &X);
    P = BinarySearch( L, X );
    printf("%d\n", P);

}

//二分查找算法
Position BinarySearch( List L, ElementType X )
{
    Position P=0;
    int left;
    int right;
    int middle;

    left = 0;
    right = L->Last;
    middle = (left + right)/2;

    while(left <= right)
    {
        if(L->Data[middle] > X)
        {
            right = middle-1;
        }
        else if(L->Data[middle] < X)
        {
            left = middle+1;
        }
        else if(L->Data[middle] == X)
        {
            P = middle;
            break;
        }
        middle = (left + right)/2;
    }
    if(L->Data[middle] == X)
        P = middle;
    else
        P = NotFound;

    return P;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值