Python数组二等分算法

bisect算法用于查找列表中的位置,可以在其中插入数据以使列表保持排序。Python有一个称为bisect的模块。使用此模块,我们可以使用二等分算法。

要使用此模块,我们应该使用-导入它

import bisect

有一些二分法相关的操作。这些是-

bisect.bisect方法(列表,元素,开始,结束)

此方法用于在排序列表中查找位置,可以在其中放置数字,并且列表保持排序。如果该元素已经存在,它将返回最右边的位置,可以在其中插入数字。

bisect.bisect_left方法(列表,元素,开始,结束)

该方法与方法相同bisect()。唯一的区别是,如果该项已经存在,则此方法将返回最左侧的位置以插入数据。

bisect.bisect_right方法(列表,元素,开始,结束)

该方法与该bisect()方法完全相同。

bisect.insort方法(列表,元素,开始,结束)

在将元素插入正确位置后,此方法用于获取排序列表。如果元素已经存在,它将在最右边插入以保持列表排序。

方法bisect.insort_left(list,element,begin,end)

该方法与insort()方法相同。唯一的区别是,如果元素已经存在,它将插入到最左侧,以使列表保持排序。

bisect.insort_right方法(列表,元素,开始,结束)

该方法与insort()方法完全相同。

范例程式码

import bisect
my_list = [11, 25, 36, 47, 56, 69, 69, 69, 78, 78, 91, 102, 120]
print('Correct Location to insert 53 is: ' + str(bisect.bisect(my_list, 53, 0, len(my_list))))
print('Correct right Location to insert 69 is: ' + str(bisect.bisect_right(my_list, 69, 0, len(my_list))))
print('Correct left Location to insert 69 is: ' + str(bisect.bisect_left(my_list, 69, 0, len(my_list))))
bisect.insort(my_list, 59, 0, len(my_list))
print(my_list)
bisect.insort_left(my_list, 78, 0, len(my_list))
print(my_list)

输出结果

Correct Location to insert 53 is: 4
Correct right Location to insert 69 is: 8
Correct left Location to insert 69 is: 5
[11, 25, 36, 47, 56, 59, 69, 69, 69, 78, 78, 91, 102, 120]
[11, 25, 36, 47, 56, 59, 69, 69, 69, 78, 78, 78, 91, 102, 120]