二分查找

题目:

输入指定列表和一个待查找的元素,输出元素是否在列表中,若存在则返回下标

思想:

利用二分查找来做,事先需要对列表进行排序,二分查找只对有序表有效

下面是具体的实现:



   
   
  1. #!usr/bin/env python
  2. #encoding:utf-8
  3. ”’
  4. 功能:二分查找
  5. ”’
  6. def binary_search(num_list, x):
  7. ”’
  8. 二分查找
  9. ”’
  10. num_list=sorted(num_list)
  11. left, right = 0, len(num_list)
  12. while left < right:
  13. mid =int(left + right) / 2
  14. if num_list[mid] > x:
  15. right = mid
  16. elif num_list[mid] < x:
  17. left = mid + 1
  18. else:
  19. return ‘待查元素{0}在列表中下标为:{1}’.format(x, mid)
  20. return ‘待查找元素%s不存在指定列表中’%x
  21. if __name__ == ‘__main__’:
  22. num_list = [ 34, 6, 78, 9, 23, 56, 177, 33, 2, 6, 30, 99, 83, 21, 17]
  23. print binary_search(num_list, 34)
  24. print binary_search(num_list, 177)
  25. print binary_search(num_list, 21)
  26. print binary_search(num_list, 211)
  27. print binary_search(num_list, 985)


结果如下:



   
   
  1. 待查元素34在列表中下标为:9
  2. 待查元素177在列表中下标为:14
  3. 待查元素21在列表中下标为:5
  4. 待查找元素211不存在指定列表中
  5. 待查找元素985不存在指定列表中


转载:https://blog.youkuaiyun.com/together_cz/article/details/76212242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值