04查找算法:顺序查找法、二分查找法

简介: 04查找算法:顺序查找法、二分查找法

顺序查找算法

概念

最基本的查找技术,过程: 从表中的第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录,如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表示没有查到记录,查找不成功。

代码实现

1. def search(alist,target):
2. for i in alist:
3. if target == i:
4. print("找到目标元素!")
5. return 0
6. else:
7. print("没有找到目标元素!")
8. return 0

总结

顺序查找法是最简单也是最常用的一种查找的方法。


二分查找算法

概念

二分查找(binary search)又称为折半查找,优点是比较次数少,查找速度快,平均性能好;缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

算法步骤

  1. 首先,假设表中的元素是按升序排列的,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前后两个子表。
  2. 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后移子表。
  3. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

算法实现

1. def binary_search(alist,target):
2. """
3.     非递归二分查找
4.     :param alist:
5.     :param target:
6.     :return: True/False
7.     """
8.     start = 0
9.     end = len(alist)-1
10. while start <= end:
11.         mid = (start + end) // 2
12. if alist[mid] == target:
13. return True
14. else:
15. if alist[mid] <target:  #在右边找
16.                 start = mid + 1
17. else: # 在左边找
18.                 end = mid -1
19. return False
1. def binary_search2(alist,target):
2. """
3. 
4.     :param alist:
5.     :param target:
6.     :return: True/False
7.     """
8. if len(alist) ==0:
9. return False
10. else:
11.         mid = len(alist)// 2
12. if alist[mid] == target:
13. return True
14. else:
15. if alist[mid] > target:
16. return binary_search2(alist[:mid],target)
17. else:  # 在左边找
18. return binary_search2(alist[mid+1:],target)


相关文章
|
2月前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
2月前
|
存储 算法 索引
【优选算法】—— 二分查找
【优选算法】—— 二分查找
|
2月前
|
算法 测试技术 索引
算法-二分查找
算法-二分查找
21 0
|
8天前
|
算法 Java 机器人
Java数据结构与算法:查找算法之二分查找
Java数据结构与算法:查找算法之二分查找
|
10天前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
14天前
|
机器学习/深度学习 算法 索引
数据结构算法--1 顺序查找二分查找
**顺序查找时间复杂度为O(n)**,适合无序列表,可以通过`enumerate`或直接遍历索引来实现。**二分查找时间复杂度为O(logn)**,适用于有序列表,利用Python中`left`、`right`指针和`mid`点不断缩小搜索范围。效率上二分查找更优。
|
14天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
19 1
|
16天前
|
算法 搜索推荐 Java
二分查找算法详解及实现
二分查找算法详解及实现
20 2
|
28天前
|
算法 Java
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
35 2
|
29天前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
35 1