刚才将排序和查找算法放在一起,感觉不方便阅读,因此将查找算法拿出来,供大家讨论
php基于快速排序实现二分查找
/**
* Description:php实现二分查找算法的类
* @author wzy
*/
class binary_search{
public $arr;
public $key;
function __construct($arr,$key){
//这里初始化的数组已经是有序数组
$this->arr=$arr;
$this->key=$key;
}
function binarysearch(){
$start=0;
$end=count($this->arr)-1;
while($start<=$end){
//mid的取值可以为上整数或者下整数
$mid=ceil(($start+$end)/2);
//$mid=($start+$end)>>1;
//$mid=intval(($start+$end)/2);
if($this->arr[$mid]<$this->key){
$start=$mid+1;
}else if($this->arr[$mid]>$this->key){
$end=$mid-1;
}else{
return $mid;
}
}
}
}
可能大家还会遇到这种情况,数组中的元素有重复数据,需要返回的是重复数据中的第一个元素的位置,例如
$arr=array(1,2,3,4,5,6,6,6,6,7,8);查找6这个元素时返回的位置应该为5,而不是其他(下标从0开始计数),这样需要在返回的mid进行判断,代码如下:
/**
* Description:php实现二分查找算法的类
* @author wzy
*/
class binary_search{
public $arr;
public $key;
function __construct($arr,$key){
//这里初始化的数组已经是有序数组
$this->arr=$arr;
$this->key=$key;
}
function binarysearch(){
$start=0;
$end=count($this->arr)-1;
while($start<=$end){
//mid的取值可以为上整数或者下整数
$mid=ceil(($start+$end)/2);
//$mid=($start+$end)>>1;
//$mid=intval(($start+$end)/2);
if($this->arr[$mid]<$this->key){
$start=$mid+1;
}else if($this->arr[$mid]>$this->key){
$end=$mid-1;
}else{
//返回第一个匹配的元素
for($i=$mid-1;$i>=0;$i--){
if($this->arr[$i]==$this->key){
$mid=$i;
}else{
break;
}
}
return $mid;
}
}
}
}
分享到:
相关推荐
PHP中的折半查找算法,也称为二分查找算法,是一种在有序数组中查找特定元素的高效算法。二分查找的基本原理是将目标值与数组中间的元素进行比较,如果两者相等,则查找成功;如果不相等,则根据比较结果确定目标值...
折半查找,也称为二分查找,是一种在有序数组中查找特定元素的搜索算法。它的核心思想是通过不断缩小搜索范围,每次将待搜索区域减半,直到找到目标元素或者确定元素不存在。这种方法适用于数据量较大且已经排序的...
以下是关于PHP实现二分查找算法的详细说明: **基本思想:** 二分查找算法的核心在于每次比较时都选取数组中间的元素作为参照。如果待查找的数值等于中间元素,查找结束,返回中间位置;如果待查找的数值小于中间...
折半查询算法,又称为二分查找算法,是一种在有序数组中查找某一特定元素的搜索算法。它的基本思想是将待查找区间分成两半,然后确定待查找的元素是在哪一半中,从而缩小查找区间,直到找到该元素或者确定元素不存在...
第一种方法: 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半...
在PHP编程语言中,实现数组排序的方法有很多,常见的包括直接选择排序、冒泡排序、快速排序、插入排序以及二分查找算法。这些算法在效率和应用场合上各不相同,它们在处理数据集合时各有优势和局限性。 首先,直接...
二分查找算法,又称为折半查找算法,是一种在有序数组中查找特定元素的高效算法。它通过比较数组中间元素的值与目标值的大小,以决定是继续在中间元素的左侧还是右侧进行查找,从而大幅缩小查找范围。对于一个有序...
2. 使用循环结构来实现二分查找算法,循环条件应确保搜索范围内的元素不会被忽略。 3. 在每次循环中,计算当前搜索范围的中间位置,然后根据中间位置的元素与目标值的比较来更新搜索范围的边界。 4. 当边界缩小到只...
在PHP中实现二分法查找,主要分为两个步骤:首先是对数组进行排序,确保数组是有序的,因为二分查找算法适用于有序数据集;其次则是实现二分查找的算法,它包含不断地将搜索区间分为两部分,并判断目标值在哪一部分...
二分查找,又称折半查找,是一种在有序数组中查找特定元素的搜索算法。它将搜索范围分为两半,比较中间的值与目标值,根据比较结果决定是继续在左侧查找还是右侧查找,直到找到目标值或搜索范围为空。二分查找的时间...
二分查找是一种高效的查找算法,它的优点是比较次数少,查找速度快,平均性能好。其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 在 PHP 中,二分查找的...
在IT行业中,PHP是一种广泛使用的服务器端脚本语言...总结,PHP的二分查找算法对于处理有序数据具有高效性,是编程中不可或缺的工具。理解和掌握这种算法,对于提升PHP程序员的技能水平和解决实际问题的能力大有裨益。
与二分查找不同的是,插值查找不是固定地将查找区间折半,而是根据关键字的值动态地调整查找的位置。 **插值查找算法的基本原理** 二分查找中,查找区间总是被均分为两部分,而插值查找则依据目标值相对于查找区间...
二分查找,又称折半查找,是一种在有序数组中查找特定元素的搜索算法。其原理是通过不断缩小搜索范围,减少查找次数,提高效率。在每次查找时,取中间元素与目标值比较,如果目标值等于中间元素,则查找成功;如果...