比较熟悉了。
但要注意细节,
二分查找时,普通方法mid处理,递归时,mid处理。
# coding = utf-8 def sequential_search(a_list, item): pos = 0 found = False while pos < len(a_list) and not found: if a_list[pos] == item: found = True pos += 1 return found print('===========顺序查找==========') test_list = [1, 2, 32, 8, 17, 10, 42, 13, 0] print(sequential_search(test_list, 3)) print(sequential_search(test_list, 13)) def ordered_sequential_search(a_list, item): pos = 0 stop = False found = False while pos < len(a_list) and not found and not stop: if a_list[pos] == item: found = True if a_list[pos] > item: stop = True pos += 1 return found print('===========已排序顺序查找==========') test_list = [1, 2, 32, 33, 47, 53, 62, 73, 90] print(ordered_sequential_search(test_list, 32)) print(ordered_sequential_search(test_list, 13)) ''' def binary_search(a_list, item): begin = 0 end = len(a_list) - 1 found = False while begin <= end and not found: mid = (begin + end) // 2 if a_list[mid] > item: end = mid - 1 elif a_list[mid] < item: begin = mid + 1 else: found = True return found ''' def binary_search(a_list, item): if len(a_list) == 0: return False else: mid = len(a_list) // 2 if a_list[mid] > item: return binary_search(a_list[:mid], item) elif a_list[mid] < item: return binary_search(a_list[mid+1:], item) else: return True print('===========二分查找==========') test_list = [1, 2, 32, 33, 47, 53, 62, 73, 90] print(binary_search(test_list, 32)) print(binary_search(test_list, 13))
C:\Users\Sahara\.virtualenvs\test\Scripts\python.exe C:/Users/Sahara/PycharmProjects/test/python_search.py ===========顺序查找========== False True ===========已排序顺序查找========== True False ===========二分查找========== True False Process finished with exit code 0