凤凰网招聘二分查找python实现

来源:互联网 发布:clover软件干嘛的 编辑:程序博客网 时间:2024/05/22 04:54
设有一组关键字序列{5,8,14,20,31,55,78,81,93,97,111},使用二分(折半)法查找关键字93需要进行多少次比较()

A. 2
B. 3
C. 4

D. 5

分析:
二分查找基本思想为:在有序序列中,取序列最中间的元素作为比较对象,若给定值与中间记录的关键码相等,则查找成功;若给定值小于中间记录的关键码,则在中间记录的左半边继续查找;若给定值大于中间记录的关键码,则在中间记录右半边区继续查找。不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。
二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。

对于本题:首先第一次比较93和最中间的元素55,93>55,然后新的区间为【78,81,93,97,111

第二次比较新区间最中间的元素93,发现93 = 93,查找成功,返回下标

查找两次,因此选A。

代码实现:python

#-*-coding=UTF-8 -*-s = raw_input().split(',')m = int(raw_input())s = list(s)#print sdef BinarySearch(str, m):    count = 0#计数器,记录查找次数    leap = -1#布尔变量,-1表示查找失败    low = 0    high = len(str) - 1    while (low <= high):        count += 1#计数器加1,表示新的查找开始        mid = (low + high) / 2        obj = int(str[mid])#因为输入的字符串,首先要转化成整型        if obj < m:            low = mid + 1        elif obj > m:            high = mid - 1        elif obj == m:            print mid            leap = 1#查找成功就将leap置1            break#跳出循环,查找结束    print 'Total %d Search(es)' % count    if leap == -1:        print 'Search No Data'        print -1#leap值还是-1表示查找失败BinarySearch(s,m)

输出示例:

5,8,14,20,31,55,78,81,93,97,111
9
Total 4 Search(es)
Search No Data
-1


5,8,14,20,31,55,78,81,93,97,111
93
8
Total 2 Search(es)

Process finished with exit code 0




原创粉丝点击