二进制插入排序实现Python

问题描述

在研究算法时,我发现了一种算法,它本质上是一种插入排序,但是它使用二进制搜索而不是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 (将#修改为@)