常见算法学习(C语言实现)(一)

来源:互联网 发布:linux telent 安装 编辑:程序博客网 时间:2024/05/29 17:47
折半查找,二分搜索(Binary Search):
       基本思想:减小顺序文件查找序列的长度,分而治之的进行关键字的查找。
         查找过程:先确定查找记录所在的范围,然后逐步地缩小查找的范围,直到找到目标关键字为止(也有可能查找失败)。
注意:折半查找适用于有序的数据记录,以上事例为数据记录为递增情况下的算法。若在数据纪录为递减的情况下,具体代码需要稍加改动。
        思考以下代码,你会发现什么问题?
        如果我们查找的数据序列长度十分庞大,那么在某些情况下 (low + high) 会不会超出 middle 所定义数据类型的表达范围,导致数据溢出,这样 middle 的值还会是我们想要的值吗?所以我们要对算法进行改进,将原先的表达式替换为下面的表达式会更为稳妥。
        还有一个问题,如果 target 并不处于我们查找的有序递增数组 array 的最小值与最大值范围之内,我们还需要一遍又一遍的执行 while 循环直到条件不满足才退出吗?我想应该不需要,所以我们最好在开头添加一个简单的判断语句来避开这种情况,代码如下。
        最后,修改后的算法如下所示:

。。。





0 0
原创粉丝点击