折半查找,插入

线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储与计算机内。要求设计一算法完成:

  1. 用最少时间在表中查找数值为x的元素;
  2. 若找不到,则将其插入表中并使表中元素仍然递增有序。

解析:有序且顺序存储,特点很明显,用折半查找,折半插入

#define SIZE 20
typedef struct{
    int data[SIZE+1];  //0号位置留空,确保下标和位置一致
    int length;
}Sqlist;

int find(Sqlist *list, int e){
    int mid,low,high; 
    low = 1, high = list->length;
	
	//查找部分
    while(low <= high){
        mid = (low + high) / 2;
        if(list->data[mid] == e)   //如果查找到,直接返回位置
            return mid;  //查找到的位置
        else if(list->data[mid] > e)
            high = mid - 1;
        else    low = mid + 1;
    }

    //没有查找到才会执行以下操作
    //此时 low == high
	//插入部分
    for(int m = list->length; m > high; m--)
        list->data[m+1] = list->data[m];

    list->data[high+1] = e;
    list->length++;
    printf("重新插入成功!");
    return high;  //插入后的位置
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值