二分查找有序数列并插入值(二分查找,有序表插入)

源代码

/************************** 二分查找有序数列并插入值 ***********************************/
#include<stdio.h>
#define len 11
#define Maxsize 100
typedef struct abc
{
    int key;

}SeqList;
int search(SeqList r[],int key);
int main()
{
    int i,key;
    SeqList r[Maxsize+1];
    //生成一个10位有序数 1,2,...,10
    for(i=1;i<=len;i++)
    {
        r[i].key=i;
        r[11].key=19;
        printf("%d ",r[i].key);
    }


    printf("\n插入:");
    scanf("%d",&key);//输入插入值

    int inplace=search(r,key);//找到插入位置,在后面插入
    printf("下标为:%d\n",inplace);
    for(i=len+1;i>inplace+1;i--)//后面的数移位
    {
        r[i]=r[i-1];
    }
    r[i].key=key;//插入

    //输出插入后的序列
    for(i=1;i<=len+1;i++)
    {
        printf("%d ",r[i].key);
    }
    printf("\n");

    return 0;
}
int search(SeqList r[],int key)
{
    int bijiao=0;
    int mid;
    int high=len,low=1;
    while(low<=high)
    {
        mid=(high+low)/2;
        bijiao++;
        if(r[mid].key==key)
        {
            printf("比较了%d次\n",bijiao);
            return mid;
        }
        else if(r[mid].key>key)
        {
            high=mid-1;

        }
        else
        {
            low=mid+1;
        }
    }
    printf("比较了%d次\n",bijiao);
    return high;


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值