使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
2013-10-13 17:45
736 查看
顺序查找
顺序查找是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。
二分查找
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
【算法过程】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
实例:
1, 2, 4, 6, 8
假设要查找的关键字为2。
首先找出该数值中中间位置的数,即4,与关键字2比较,两数不等,则将数组以中间位置关键字4为分界点分为前后两个字表,即
{1 2}和{6 8}
中间位置关键字4大于要查找的关键字2,所以查前一个子表{1 2},该字表中有2,查找成功。
<?php //$n为待查找的数组元素的个数,$k为待查找的元素 function seq_sch($array, $n, $k) { $array[$n] = $k; for($i=0; $i<$n; $i++) { if($array[$i]==$k) { return true; break; } } if ($i<$n) //判断是否到数组的末尾 { return $i; } else { return false; } } $array = array(3, 6, 1, 9, 2, 10); $n = count($array); $k = 8; if(seq_sch($array, $n, $k)) { echo "顺序查找成功"; } else { echo "顺序查找失败"; } ?>
顺序查找是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。
二分查找
<?php //$low为待查找的数组中的最小值,$high为数组中的最大值,$k为要查找的关键字 function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low+$high)/2); if ($array[$mid] == $k) { return true; } elseif ($k < $array[$mid]) { return bin_sch($array, $low, $mid-1, $k); } else { return bin_sch($array, $mid+1, $high, $k); } } return false; } $array = array(1, 2, 4, 6, 8); $low = min(1, 2, 4, 6, 8); $high = max(1, 2, 4, 6, 8); $k = 8; if(bin_sch($array, $low, $high, $k)) { echo "二分查找成功"; } else{ echo "二分查找失败"; } ?>
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
【算法过程】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
实例:
1, 2, 4, 6, 8
假设要查找的关键字为2。
首先找出该数值中中间位置的数,即4,与关键字2比较,两数不等,则将数组以中间位置关键字4为分界点分为前后两个字表,即
{1 2}和{6 8}
中间位置关键字4大于要查找的关键字2,所以查前一个子表{1 2},该字表中有2,查找成功。
相关文章推荐
- 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
- PHP 顺序查找和二分查找(也叫做折半查找)算法
- . 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列,要求执行效率高,并说明如何改善执行效率(该函数必须自己实现,不能使用php函数)。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 写一个算法,使对象可以像数组一样进行foreach循环,要求属性必须是私有的(Interator模式的PHP5实现,写一类实现Interator接口)
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 奇葩的OBJ-C ~ 1 父类的类方法可以用来新建一个子类的对象 -- 使用关键字self
- 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的
- unserialize的这个问题是由一个emlog论坛用户在使用时报错而发现的 问题表现情况如下: emlog缓存的保存方式是将php的数据对象(数组)序列化(serialize)后以文件的形式存放,
- 使用 satis 搭建一个私有的 Composer 包仓库 在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需
- 只有一个公网IP也可以使用LVS的DR模式!(外带php session粘滞问题解决)