代码改变世界

CodeKata-Karate Chop

2013-02-17 21:47  MichaelYin  阅读(228)  评论(0编辑  收藏  举报

这个题目的意思是让读者用尽可能的多的方法实现二分查找算法,并对每种算法的优劣进行比较,题目详情可点击这里。二分法查找其实并不难,比较常见的就是两种方法,递归和迭代,并且方法中通过边界索引值进行计算,不会对原有的array进行任何修改。

在Python里面,优雅的切片运算符提供了另外一种方法的思路。在调用时不停的对需要进行比较的列表进行切片操作,不管是递归还是迭代,得到的都是切片后的列表。

代码如下:

def slice_binary_search(target, list, count=0):
    length = len(list)
    if(length == 0):
        return -1
    else:
        middle = (length-1)/2
        if(target ==list[middle]):
            return count+ middle
        elif(target > list[middle]):            
            return slice_binary_search(target, list[middle+1:length], middle + 1)
        else:
            return slice_binary_search(target, list[0:middle])
        
        
print slice_binary_search(1, [1, 3, 5])
print slice_binary_search(5, [1, 3, 5])
print slice_binary_search(2, [1, 3, 5])

上面方法,稍作修改可写出迭代方式的算法,仅仅是开阔思维,分片操作会造成额外的开销,生产环境下不建议使用。