zhuhouyu 2016-12-08 14:16 采纳率: 100%
浏览 977
已采纳

C语言的相关问题,求助大神们。

图片说明原题如图所示。C语言中,设计函数:search(),用折半查找法在已排序的n个数种查找指定的数据,若存在,返回其所处的位置,否则,将其插入适当位置使数据仍有序。
这个程序我已经写完了前半段,但是后半段的那个插入其中使其保持原来的顺序,我的是从大到小排列,不知道后半段代码该如何写了。求助大神们。
int search (int *d,int n,int key){
int low,high,mid,i;
low=0;
high=n-1;
while( low <= high){
mid=(low+high)/2;
if(key==d[mid]) return mid;
else if(key>d[mid]) high=mid-1;
else low = mid + 1;
}
return 0;
}

  • 写回答

2条回答 默认 最新

  • qq_34479762 2016-12-08 16:17
    关注

    注意数组要足够大,不然插入新元素时下标会越界
    int Search(int *d, int n, int key) {
    int low, high, mid;
    low = 0;
    high = n-1;
    while( low <= high){
    mid = (low + high) / 2;
    if(key == d[mid])
    return mid;
    else if(key > d[mid])
    high = mid - 1;
    else low = mid + 1;
    if((low == mid || high == mid) && d[mid] != key) {
    if(d[mid] > key) {
    for(int i = n ; i > mid + 1; i--)
    d[i] = d[i - 1];
    d[mid + 1] = key;
    return 666;
    } else {
    for(int i = n; i > mid; i--)
    d[i] = d[i - 1];
    d[mid] = key;
    return 666;
    }
    }
    }
    return 0;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办