【问题标题】:how to measure the time of selection sort?如何衡量选择排序的时间?
【发布时间】:2020-10-18 08:40:14
【问题描述】:
  • 当我测量选择排序的时间时 随机数组大小为 10000,随机数范围为 1000 当大小为 1000000 时,它给了我 14 秒的时间 它给了我 1 分钟,我认为它应该小于 5 秒 你能帮我用算法来缩短时间吗
def selection_sort(selection_random_array):
    for i in range(len(selection_array) - 1):
        minimum_index = i
        for j in range(i + 1, len(selection_array)):
            if selection_array[j] < selection_array[minimum_index]:
                minimum_index = j
        selection_array[i], selection_array[minimum_index] = selection_array[minimum_index], selection_array[i]
    return selection_array

print("--------selection_sort----------")
start1 = time.time()
selection_sort(selection_random_array)
end1 = time.time()
print(f"random array: {end1 - start1}")  

【问题讨论】:

  • 您的问题是“如何让排序更有效率”还是“如何准确计时”?
  • 您的代码不起作用 -- selection_sort 的参数名称是 selection_random_array,但函数体使用 selection_array。你能给出一个最小的工作示例(包括随机数组生成)。

标签: python-3.x algorithm sorting


【解决方案1】:

您似乎在问两个问题:如何改进选择排序以及如何准确计时。

两者的简短答案是:你不能。如果您修改排序算法,则不再是选择排序。如果没问题,行业标准是快速排序,所以看看那个算法(它要复杂得多,但运行时间为 O(n log n),而不是选择排序的 O(n^2) 时间。

至于你的另一个问题,“我如何准确计时”,你也不能。计算机不再只处理一件事。您的操作系统不断在彼此之间执行线程任务。您的 CPU 在运行时完全专用于该程序的可能性为 0%。那是什么意思?这意味着程序完成所需的时间将在每次运行时发生变化。除此之外,还需要考虑调用 time.time() 所花费的时间。

【讨论】:

  • 我想要选择并且我用最好的 CPU 运行我想要的是将时间降低到 5 秒或更短我认为平均是这样的
  • 你不能,这就是我要说的。选择排序不是快速排序。渐近时间复杂度不是“我有一个好的 CPU”问题。
  • 是的,OP 提出了两个不同的问题,但您都没有回答 - OP 没有询问如何使选择排序渐近更有效,而 OP 没有'不要问如何完美地准确地测量运行时间。当然,可以编写一个更有效的选择排序实现,同时仍然是选择排序,并且可以比 OP 更准确地测量运行时间代码可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 2019-10-19
  • 2018-03-27
  • 1970-01-01
  • 2021-05-03
  • 2021-12-12
相关资源
最近更新 更多