问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++:有15个数按又大到小顺序放在一个数组中,输入一个数,要求用折半法查找.......求每一步骤的解释.

发布网友 发布时间:2022-04-24 06:29

我来回答

3个回答

热心网友 时间:2023-10-08 20:58

【解题思路】
  折半查找法,是指在一组按顺序排列的数中,每次都从中间位置开始比较,如果等于被查找数就是找到了,如果不等于被查找数,则在另外一半的元素中找,循环往复,一直到找到或找遍为止。折半查找法最好的就是用函数的递归调用。
  比如上题,要在一个15个元素的递增数组S中查找数值A,查找范围是S[0]-S[14],那么首先是找出中间点S[7]作比较,如果S[7]等于A就是找到了,如果S[7]大于A,则说明A在S[0]-S[6]之间;反之,如果S[7]小于A,则说明A在S[8]-S[14]之间,然后再重复上述步骤,找出范围内的中间点进行比较,一直到找到或者不能再折半为止。
  
【程序代码】
#include <iostream>                   //控制台操作头文件
/*下面的Find()函数是在递增数组中用折半查找法的递归函数,其中S是要查找的数组,B是查找范围的起始下标,E是查找范围的终止下标,A是要查找的数值,如果找到了就返回该数值在数组中是第几个(从第0个开始算),如果找不到就返回-1*/
int Find(int *S,int B,int E,int A)    //查找函数
{if(B>=E)                             //不能折半则无需继续递归
   {if(S[B]==A) return B;             //找到则返回数组下标
    else return -1;}                  //找不到则返回-1
 int I=B+(E-B+1)/2;                   //折半查找的中间点位置
 if(S[I]==A) return I;                //和中间点比较,找到则返回I
 if(S[I]>A) E=I-1;                    //大于A则在数组的前半段查找
 else B=I+1;                          //否则在数组的后半段查找
 return Find(S,B,E,A);}               //递归调用查找函数
 
int main()                            //主函数 
{int S[]={1,3,5,7,9,11,13,15,17,      //定义一个16个元素的递增数组
          19,21,23,25,27,29,31,};
 int A=0,O=0;                         //定义两个整型变量
 while(A>=0)                          //当A为非负数的时候循环 
      {printf("请输入要找的数值:");   //显示提示输入的信息
       scanf("%d",&A);                //从键盘输出要查找的数
       O=Find(S,0,15,A);              //调用函数在S数组中查找
       if(O==-1) printf("没有找到\n");//如果找不到显示提示信息
       else printf("%d在第%d个\n",A,O);//否则显示出找到的对应下标
       printf("\n");}                 //换行开始查找下一个
 system("PAUSE");                     //屏幕暂停,以便看到运行结果 
 return 0;                            //结束程序
}

【运行结果】
以上程序在DEV C++中运行通过,本来想附图,发现附不上来。

热心网友 时间:2023-10-08 20:59

// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
int binarySearch(int L[],int n,int x);
int main()
{
int x;
cout<<"请输入数组的值"<<endl;
int L[5];
for(int j=0;j<5;j++)
cin>>L[j];

cout<<"请输入需要查找的数字"<<endl;
cin>>x;
int t= binarySearch(L,5,x);
if(t<0)
{
cout<<"没有这个数的"<<endl;
}
else
cout<<"这个数是:"<<t<<endl;

return 0;
}
int binarySearch(int L[],int n,int x)
{
int low=0;
int hign=n-1;
int mid;
while(low<=hign)
{
mid=(low+hign)/2;
if(L[mid]==x)
{
return x;
}
if(L[mid]>x)
low=low+1;
else
{
hign=mid-1;
return -1;
}
}
}

热心网友 时间:2023-10-08 20:59

取出低(n+1)/2的数和你输入的数对比,如果你输入的数小的话到右边去查找,如果大的话到左边去查找。这个函数递归下去。如果相等的话返回索引。如果两次查到的都是同一个数的话就证明没有这个数,返回查找不到。追问程序后面注释解释,这么的不明白。.

追答。。。。。。算了,懒得写程序了。不好意思。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
吃干燥剂会有什么反应 干燥剂不慎食用怎么办 于冕被流放多少时间才回来 石羊场客运站坐几路公汽到成都市龙潭社区保平村九组? 从成都石羊场到龙潭寺北湖客运站做地铁公交咋个赶车呀?老师们_百度知 ... 成都理工大学坐车到石羊场客运站怎么走?大概要多久啊?谢谢!! 请问一下成都理工大学到石羊车站怎么做车啊? 还在盲目护理毛孔吗?如何正确护理毛孔? 毛孔粗大该如何处理? 脸t区毛孔粗大怎么办 毛孔粗大的原因是什么 vb折半法查询,二分法 C语言折半法查找输入的数 关于C++折半法查找的问题 C语言中的“折半查找法”是什么? c语言如何用折半查找法查找并统计人数啊?急呀! C++折半查找的基本思想和步骤 C语言中用折半法查找 冰墩墩是什么材质? “冰墩墩”如此火爆,“冰墩墩”是如何诞生的?什么时候诞生的? 冰墩墩是怎么来? 梦见炕洞子着火,然后又用水浇灭 梦见炕洞里有鸡蛋? 梦见炕洞子里钻出大蛇? 梦到蛇爬在炕洞子里预示着什么周公解梦? 梦见我家炕洞里有很多火,烧的还很旺。 梦见炕洞冒烟 梦见电炕洞喷火 梦到炕洞里有人 晚上梦见炕洞发光跑出好多小蛇 求解梦:梦见我妈钻炕洞里去了是怎么回事,是凶是吉? 做果冻可以不放果糖吗? c++用折半法查找数组中元素,自己编了一下,但不知道哪里错了 数据结构中的折半查找是怎么回事?谁能给个具体例子,谢谢了。 C语言,折半查找法(二分查找法),找到数列中的一个数。 C语言中怎样利用折半查找法(二分查找法)找到数列中的一个数? 这个程序错在那里:用折半法查找数组中的一个数。 顺序查找法和先排序再折半法哪个效率高? 把一个无序的数组排序后用折半法查找其中一个数,然后怎样输出这个数字没排序前的下标 C语言编程,15个由大到小的数有序排列用折半法查找编程不知道这个程序哪儿错 了,求大神指导 海尔冰箱bcd—628wacw 的排水孔在哪里 20万左右的轿车排行榜推荐有哪些? 房间来了很多会飞的小虫子,怎么办? 在中国40万到50万买什么小汽车好? 现在买什么车最好,20W-50W之间的 急!房间来了只大蛤蟆,怎么办?? 50万左右买什么车好 50万左右汽车排行榜 求解!房间突然来了很多苍蝇。 http:&#47;&#47;baike.baidu.com&#47;view&#47;10671.htm#sub4999891 &lt;&lt;匆匆&gt;&gt;这篇课文的读后感。 20万左右买什么车最好? 梦见老公回家后,不和我同房