重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。
创新互联拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕十多年,专业且经验丰富。十多年网站优化营销经验,我们已为成百上千中小企业提供了成都网站建设、网站设计解决方案,定制网站开发,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!
怎么插入呢?感觉没有什么位置上的规定啊。是不是数列要满足单调性啊?如果满足了单调性,才好折半查找吖。如果数列是递增的,那么就可以每次取出数列的中间元素,比较两个的大小。
好多错误,请分辨好array[index]中index的含义。另外请在百度一下折半查找法的算法,注意index。
以下程序修改版,在http://codepad.org/zvuCYnp2 在线编译网站测试了几个值是正确。
无此数);else printf(该数是第%d个元素的值,mid );} } 你的程序的前提是输入的时候就必须是从大到小排列的,否则没法执行。还有,程序里面一些没必要的我给注释掉了,我改动的地方我给加了注释。仅作参考。
T的elem没初始化,没有申请内存空间。而且Create的参数T必须要用引用传递,不然main中执行完Create(T,a)后,T的值不会变化 。
第一个for :for ( i = 0 ; i 15 ; i++ )或者把下面的a[i] 改成 a[i-1]因为数组下标是从0开始的。说句题外话,个人建议你把每行的缩进、不同功能代码段之间的空行做好,不然这样很难找BUG的。
折半查找法是算法一种,可以被任何计算机语言使用。用C语言自然也可以实现。
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
这是由于前面在读入数字时,遗留在键盘缓冲区中的回车符引起的。只要把第一个图中红框中的语句修改为:scanf(%c%c,&c,&c);就可以了。这样第一个%c就读掉了上次遗留下的“回车符”,第二个%c就读到了Y或N。
你的程序第一眼给我的感觉,很混乱。这样是最容易出问题的。以下程序修改版,在http://codepad.org/zvuCYnp2 在线编译网站测试了几个值是正确。
无此数);else printf(该数是第%d个元素的值,mid );} } 你的程序的前提是输入的时候就必须是从大到小排列的,否则没法执行。还有,程序里面一些没必要的我给注释掉了,我改动的地方我给加了注释。仅作参考。
折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。
我给你的建议如下:1,不要轻易使用全局变量 2,bysearch函数最好把要查找的数据和数组长度作为形式参数传入如int bysearch(int a[], int find, int len)这样你的函数才能通用和有意义。
折半查找要求元素集合必须是有序的,如果是无序的,那就没办法了。预先排序的话,效率还要低些,除非要查找很多元素。如果是有序的,那就用下面这个方法吧。
T的elem没初始化,没有申请内存空间。而且Create的参数T必须要用引用传递,不然main中执行完Create(T,a)后,T的值不会变化 。