原题如图所示。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;
}
C语言的相关问题,求助大神们。
- 写回答
- 好问题 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;
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报