python - 选择排序与插入排序的效率

标签 python sorting time-complexity

我目前正在尝试在 python 中实现插入排序和选择排序。我的两个实现都有效。然而,当我对排序计时时,选择排序的执行速度始终比插入排序快 1.5 倍,尽管我的插入排序实现进行的比较次数大约是选择排序实现的一半。我似乎找不到原因。

def select_sort(data):
    for i in range(len(data)):
        minimum, index = None, i
        for j in range(i, len(data)):
            if minimum is None:
                minimum = data[j]
            if data[j] < minimum:
                minimum = data[j]
                index = j
        data[i], data[index] = data[index], data[i]
    return data

def insert_sort(data):
    for i in range(1, len(data)):
        for j in range(i, 0, -1):
            if data[j] >= data[j - 1]:
                break
            data[j], data[j - 1] = data[j - 1], data[j]
    return data

def time_sort(S):
    elapsed = []

    start = time()
    insert_sort(copy(S))
    elapsed.append(time() - start)

    start = time()
    select_sort(copy(S))
    elapsed.append(time() - start)

    return elapsed

最佳答案

insert_sort 进行 O(N2) 次交换,而 select_sort 进行 N 次交换。

交换在 select_sort 中的外循环中,但在 insert_sort 中的内循环中。

关于python - 选择排序与插入排序的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094244/

相关文章:

python - OpenCV:如何在图像上绘制圆形轮廓

javascript - 根据值重新排序数组

arrays - 在 Swift 中按属性对类或结构数组进行排序的通用函数

c - MexFile 导致 "Assertion detected"错误 - mexfiles 中的 memcpy 有问题吗?

java - 有效地找到排序数组中的整数数量

python - 将字符串与正则表达式匹配

python - 引用上一行的值与map或apply

java - 如何提高该算法的运行时复杂度?

python - Cython 随机滚动不会产生预期的输出

algorithm - 确定递归函数的 CN 和时间复杂度