Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • 操作系统

  • 计算机网络

  • 数据结构和算法

    • 数据结构

    • 算法

      • 常见排序算法实现
      • 常见搜索算法实现
        • 顺序搜索
          • 算法实现
        • 二分搜索
          • 算法实现
      • Leetcode刷题之1.两数之和
      • 线性同余随机数算法实现
      • 深入理解递归算法
      • 二叉搜索树转双向链表
  • MySQL

  • Redis

  • Nginx

  • MongoDB

  • 其他

  • 计算机基础
  • 数据结构和算法
  • 算法
Ravior
2011-09-12
目录

常见搜索算法实现

# 顺序搜索

顺序搜索又名线性搜索是最基本的搜索算法,实现方式很简单,是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。

# 算法实现

function search($arr, $item) {
	foreach ($arr as $key => $value) {
		if ($value == $item) {
			return $key;
		}
	}

	return -1;
}
1
2
3
4
5
6
7
8
9

# 二分搜索

二分搜索要求被搜索的数据结构已经排序,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。实现步骤如下:

  • 选择数组中的中间值;
  • 如果选中值是待搜索值,那么算法执行完毕;
  • 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找;
  • 如果待搜索值比选中值要大,则返回步骤1并在选中值右边的子数组中寻找;

# 算法实现


function binarysearch($arr, $value) {
	$low = 0;
	$high = count($arr)-1;
	while ($low <= $high) {
		$mid = floor(($low+$high)/2);
		$item = $arr[$mid];
		if ($item > $value) {
			$high = $mid-1;
		} elseif ($item < $value) {
			$low = $mid+1;
		} else {
			return $mid;
		}
	}

	return -1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#算法#数据结构
上次更新: 2022/12/01, 11:09:34
常见排序算法实现
Leetcode刷题之1.两数之和

← 常见排序算法实现 Leetcode刷题之1.两数之和→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式