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

设有一组关键字序列{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 s
def 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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值