二分查找的两种实现方式(递归和非递归)--python实现
2017-08-07 10:48
513 查看
二分查找是我第一次面试时的编程题。
非递归方式:
个人认为要记住的点:首先要有查找范围,所以必须 low <= high .一旦超出这个范围说明要查找的数不存在,返回 None .
其次,二分查找就是缩小查找范围,方法就是不断改变 low 和 high .
最后,要说明的是一个python 语法, python 有两种除法,第一种是精确除法, " / " 这个除法的结果一定是 一个浮点类型的数。 第二种称为地板除," // " 这个其实就是取整。
递归方式:
递归方式与上面提到的一样,只要有查找范围,便去查找,没有范围了就说明没找到,返回 None.
非递归方式:
# 二分查找非递归实现 def binary_search(list, item): low = 0 high = len(list) - 1 while low <= high: mid = (low + high)//2 guess = list[mid] if guess == item : return mid if item > guess : low = mid + 1 else: high = mid -1 return None #测试 my_list = [1,3,4,5,6,7,8,9] print(binary_search(my_list, 5)) print(binary_search(my_list, 2))
个人认为要记住的点:首先要有查找范围,所以必须 low <= high .一旦超出这个范围说明要查找的数不存在,返回 None .
其次,二分查找就是缩小查找范围,方法就是不断改变 low 和 high .
最后,要说明的是一个python 语法, python 有两种除法,第一种是精确除法, " / " 这个除法的结果一定是 一个浮点类型的数。 第二种称为地板除," // " 这个其实就是取整。
递归方式:
#二分查找递归方式 def binary_s(list, low, high, item): if low <= high: mid = (low + high) //2 guess = list[mid] if item == guess: return mid if item < guess: binary_s(list, low, mid-1, item) else: binary_s(list, mid+1, high, item) return None #测试 my_list = [1,3,4,5,6,7,8,9] print(binary_s(my_list, 0, len(my_list)-1, 5)) print(binary_s(my_list, 0, len(my_list)-1, 2))
递归方式与上面提到的一样,只要有查找范围,便去查找,没有范围了就说明没找到,返回 None.
相关文章推荐
- 二分查找的两种实现方式--循环和递归
- 算法:两种方式(递归/循环)实现二分查找
- C语言实现 二分查找数组中的Key值(递归和非递归)
- 二分查找的两种实现(循环与递归)
- 【python中二叉树的实现】python中二叉树的创建、三种方式递归遍历和非递归遍历
- 二分查找的递归/非递归方式C++实现
- 递归和非递归两种方式实现二分法查找(java)
- 二分查找的两种实现方式
- C++之二分查找/折半查找(非递归和递归两种方式)
- 使用递归和非递归两种方法实现二分查找!!!
- c++实现二分查找 递归和非递归
- java两种实现二分查找方式
- 二分查找的两种实现方式(JAVA)
- 二分查找递归和非递归(java实现)
- java实现 二分查找 非递归与递归2种方式
- javascript中二分查找法的两种实现方式
- 面试题20:顺时针打印矩阵递归和非递归两种方式实现
- java实现二分查找-两种方式
- 二分查找的两种实现方式
- C语言经典算法(九)——递归实现二分查找的两种方法