【发布时间】:2020-10-12 11:15:59
【问题描述】:
在研究算法时,我发现了一种算法,它基本上是一种插入排序,但它使用二进制搜索而不是 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,low,high,key,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, high, key, k)
else:
BinarySearch(A, low, mid, key, k)
else:
mid=(low+high)//2
if A[mid]>key:
for j in range(k,mid,-1):
A[j] = A[j-1]
A[j-1] = key
InsertionSort_improved(A)
print(A)
【问题讨论】:
标签: python sorting binary-search insertion-sort