关于C程序中的二分法
输入10个不同的数,将其按大小排序;然后再输入一个数,使用二分法查找这个数所处的位置。若这个数已经存在则显示该数已存在,否则将它插入到已经排序的数组中合适的地方,并输出新...
输入10个不同的数,将其按大小排序;然后再输入一个数,使用二分法查找这个数所处的位置。若这个数已经存在则显示该数已存在,否则将它插入到已经排序的数组中合适的地方,并输出新的数组。 排序我没有问题,但是我不明白什么是二分法,而且不知道怎样把这个数插入这个数列? 因为我很菜。。。希望回答的时候能附上程序的说明部分,谢谢啦~
展开
1个回答
展开全部
2分法也就是2分查找法也叫折半法吧
不过条件就是你所查找的数据必须先有序!必须采用顺序存储结构
2
分查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表
首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
随手写段代码你看看
int
SearchData(int
des,int
min,int
max)
/*这里的min是最小下标坐标max是最大下标坐标des就是要查找的值的下标*/
{
int
mid=0;
mid=(min+max)/2;//mid取所查找数组的中间值的下标
while(min<max)//循环不用说啦吧!
{
if(mid==des)
return
mid;//如果mid==des的话就返回
else
if(mid
>des)//如果大于des的话
{
max=mid-1;最大值下标等于当前小标-1,也就是查找的范围缩小了
}
else
{
min=mid+1;//否则的话就最小值下标坐标+1缩小查找范围
}
}
}
没有调试,你再看看,如果有疑问,请留言
不过条件就是你所查找的数据必须先有序!必须采用顺序存储结构
2
分查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表
首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
随手写段代码你看看
int
SearchData(int
des,int
min,int
max)
/*这里的min是最小下标坐标max是最大下标坐标des就是要查找的值的下标*/
{
int
mid=0;
mid=(min+max)/2;//mid取所查找数组的中间值的下标
while(min<max)//循环不用说啦吧!
{
if(mid==des)
return
mid;//如果mid==des的话就返回
else
if(mid
>des)//如果大于des的话
{
max=mid-1;最大值下标等于当前小标-1,也就是查找的范围缩小了
}
else
{
min=mid+1;//否则的话就最小值下标坐标+1缩小查找范围
}
}
}
没有调试,你再看看,如果有疑问,请留言
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询