红黑树简单了解

手机游戏开发者 2024-9-3 17:40:10 50 0 来自 中国
先引入一个题目:
假设有一个巨细为10, 000的数组,按巨细举行排序,如 【1,3,8,15...】,假设我要在这个数组中查询是否存在 888 这个数字,那么这个算法我们要怎么写呢?
固然肯定有人会说,写个循环遍历一下不就好了吗?
这种做法不能说是错的,但是却不是最好的方法。
这里使用二分查找法的话,服从会更高的。
什么是二分查找法?

【内容来自百度百科】二分查找也称折半查找(Binary Search),它是一种服从较高的查找方法。但是,折半查找要求线性表必须接纳序次存储结构,而且表中元素按关键字有序分列。
起首,假设表中元素是按升序分列,将表中央位置记录的关键字与查找关键字比力,如果两者相等,则查找乐成;否则使用中央位置记录将表分成前、后两个子表,如果中央位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找乐成,或直到子表不存在为止,此时查找不乐成。
以上的说法大概不敷明白,我们来用上边的数组举个例子:

  • 我们起首将这个 10,000 巨细的数组均匀(大抵均匀,大概存在正负1的弊端)切分为两部门 也就是下标为 0 ~ 4999, 5000 ~ 9999
  • 取此中下标为5000的记录与 888 对比巨细,如果便是则直接返回
  • 如果小于则对 0 ~ 4999 的部门继续实行切分比对的操纵
  • 如果大于则对 5000 ~ 9999 的部门继续实行切分比对的操纵
以上就是二分查找法的头脑。

  • 时间复杂度 为 O(log2n)
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 04:57, Processed in 0.172983 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表