博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
顺序查找和二分查找
阅读量:5266 次
发布时间:2019-06-14

本文共 1399 字,大约阅读时间需要 4 分钟。

1.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组[转]

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 "顺序查找失败";
}
?>

顺序查找是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。

3.二分查找

<?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,查找成功。

转载于:https://www.cnblogs.com/limeng951/p/5621544.html

你可能感兴趣的文章
传微软Windows Phone 7将更新支持HTML 5
查看>>
P1970 花匠
查看>>
query和exec区别
查看>>
媒体查询判断ipad和iPhone各版本
查看>>
java语言与java技术
查看>>
南阳22
查看>>
分享一次在Windows Server2012 R2中安装SQL Server2008
查看>>
NOIP2016提高A组五校联考2总结
查看>>
OpenStack_Glance
查看>>
Spring PropertyPlaceholderConfigurer数据库配置
查看>>
RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理
查看>>
Python日期计算
查看>>
用css3绘制你需要的几何图形
查看>>
对其他团队的项目的意见或建议
查看>>
iOS 项目的编译速度提高
查看>>
机房收费系统——报表
查看>>
How to unshelve many shelves at same time
查看>>
table中checkbox选择多行
查看>>
动态链接库
查看>>
Magento开发文档(三):Magento控制器
查看>>