代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Perl
】
二分查找算法
作者:
不吃皮蛋
/ 发布于
2014/9/12
/
728
my @list = qw(Cat Elephant Giraffe Lion Orangutan Zebra); print binarySearch(\@list, 'Orangutan'), "\n"; sub binarySearch { my ($list, $query) = @_; my ($low, $high) = ($[, $#$list); while ( $low <= $high ) { my $try = int( ($low + $high) / 2 ); # note: "lt" and "gt" because we are comparing strings # if we were comparing numbers then we would use "<" and ">" $list->[$try] lt $query and do { $low = $try + 1; next }; $list->[$try] gt $query and do { $high = $try - 1; next }; return $try; # By this point it must be equal! } } sub binary_search_recursive { my ($arr, $value, $left, $right) = @_; return if $right < $left; # not found my $mid = int(($right-$left)/2)+$left; return $mid if $arr->[$mid] == $value; if ($value < $arr->[$mid]) { return binary_search_recursive($arr, $value, $left, $mid-1); } else { return binary_search_recursive($arr, $value, $mid+1, $right); } } sub binary_search_inplace { my ($arr, $value, $left, $right) = @_; while ($left <= $right) { my $mid = int(($right-$left)/2)+$left; return $mid if $arr->[$mid] == $value; if ($value < $arr->[$mid]) { $right = $mid-1; } else { $left = $mid+1; } } } my @l = qw(0 1 2 3 4 5 6 7 8 9); print binary_search_recursive \@l, 7, $l[0], $l[-1]; print binary_search_inplace \@l, 7, $l[0], $l[-1]; use warnings; sub binary_search(@$) { my ($arr, $value) = @_; $left = $[; $right = %#$arr; while ($left <= $right) { my $mid = int($right + $left) >> 1; if ($arr->[$mid] eq $value) { return 1 } if ($value lt $arr->[$mid]) { $right = $mid - 1 } else { $left = $mid + 1 } } return 0; } my @arr = qw(1 2 3 4 5 6 7 8); for (0 .. 9) { print binary_search(\@arr, "$_") . "\n"; }
试试其它关键字
二分查找
二分法
同语言下
.
获取本机所有IP和设备的绑定情况
.
生成隨機密碼
.
取文件的最后修改时间
.
获取本机所有IP和设备的绑定情况
.
将perl脚本变成乱糟糟的一团
.
从 HTML网页中解析出链接
.
使用 HTTP::Request 请求 URL 并将响应保存到文件
.
使用指定的User-Agent抓取网页
.
使用 Net::SMTP发送邮件
.
编写的一个简单 Web服务器
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
不吃皮蛋
贡献的其它代码
(
18
)
.
冒泡排序
.
插入排序
.
调用memcache范例
.
计算倒数算法
.
冒泡法排序
.
二分查找算法
.
绘制指数统计图表
.
检测文件大小
.
添加字符串到文件代码
.
检测输出设备是屏幕还是管道
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3