二分法
前提条件:
输入的列表需要是有序的排布的,不可以是随机分布值的集合。
背景:
假设当前输入的列表为一个从小到大排序的集合,那么需要实现再其中找一个指定值,并返回其在列表中的索引位置。
普通方法:
使用此方法,当目标值的索引位越靠后时,需要执行的时间越长
def get_index(list, target_num):
# 使用for循环依次判断
for item in list:
if item == target_num:
target_index = list.index(item)
return target_index
list1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 19, 20]
print(get_index(list1, 16))
二分法:
使用此方法,能迅速判断出索引位
def binary_search(list, target_num):
# 定义起始和终止的索引位置
start_index = 0
end_index = len(list) - 1
# 当最后的索引位一直大于等于起始索引位时,循环判断
while start_index <= end_index:
# 中间的索引位以及索引位对应的值
mid_index = (end_index + start_index) // 2
mid_num = list[mid_index]
# 当中间位置就是目标值时,则返回该索引位
if mid_num == target_num:
return mid_index
# 当中间值大于目标值时,则赋值终止位为中间索引位-1,再进行下一轮判断
if mid_num > target_num:
end_index = mid_index - 1
# 当中间值小于目标值时,则赋值起始位位为中间索引位+1,再进行下一轮判断
else:
start_index = mid_index + 1
return None
list1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 19, 20]
print(binary_search(list1, 16))
排序算法:
前提条件:
输入随机数值的列表。
背景:
假设当前输入的列表为随机数值的集合,那么需要实现从小到大的排序,并返回一个新的列表。
排序法:
# 定义一个找出list中最小值的函数
def find_small_index(list):
# 取列表第一个值和索引
small_list_0 = list[0]
small_list_index = 0
for i in range(1, len(list)):
# 判断,当从索引1开始取值,该值小于初始取值时,则
# 重新赋值给起始比较值的变量
if list[i] < small_list_0:
small_list_0 = list[i]
small_list_index = i
return small_list_index
def selection_sort(list):
# 定义一个空列表,来接受从小到大的排序结果
new_list = []
for i in range(len(list)):
# 依次找出最小值,并加入到新的列表中
small_value = find_small_index(list)
new_list.append(list.pop(small_value))
return new_list
a = [5, 3, 8, 7, 4, 9, 6]
print(selection_sort(a))