问题描述
在研究算法时,我发现了一种算法,它本质上是一种插入排序,但是它使用二进制搜索而不是WHILE循环语句来向后移动元素。
我编写了以下实现代码,在给定的输入下它可以正常工作。
我的问题是1)我的代码是否有任何改进? 2)尽管使用二进制搜索,我仍然不明白为什么它具有二次时间。我想我需要帮助来了解这一点。
谢谢您的宝贵建议:)
A=[3,25,18,41,52,26,38,57,9,49]
def InsertionSort_improved(A):
for k in range(1,len(A)):
key = A[k]
low = 0
high = k-1
BinarySearch(A,low,high,key,k)
def BinarySearch(A,k):
if low<high:
mid= (low+high)//2
if A[mid] == key:
for i in range(k,mid,-1):
A[i] = A[i-1]
A[i-1] = key
elif A[mid] < key:
BinarySearch(A,mid+1,k)
else:
BinarySearch(A,k)
else:
mid=(low+high)//2
if A[mid]>key:
for j in range(k,-1):
A[j] = A[j-1]
A[j-1] = key
InsertionSort_improved(A)
print(A)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)