当 CPU 对 10^8 operations/sec 进行运算时,对数组进行排序所花费的时间

Time taken to sort array, when CPU operates on 10^8 operations/sec

假设一个CPU每秒可以处理10^8个操作。假设您必须对包含 10^6 个元素的数组进行排序。以下哪项是正确的?

  1. 插入排序总是需要 2.5 小时以上,而归并排序总是不到 1 秒。
  2. 插入排序总是需要 2.5 小时以上,而快速排序总是不到 1 秒
  3. 插入排序可能需要超过 2.5 小时,而归并排序总是需要不到 1 秒。
  4. 插入排序可能需要超过 2.5 小时,而快速排序总是需要不到 1 秒。

插入排序的最坏情况复杂度是多少?

合并排序和快速排序的最坏情况下的复杂度是多少?

有没有可能插入排序不到2.5小时?如果是,情况如何?

快速排序(或归并排序)的最佳复杂度是多少? 插入排序的最佳情况复杂度是多少?

如果你回答了这些问题。你会很容易回答你的问题。

如果您不知道什么是最坏情况或最佳情况,请尝试找到这些问题的答案。

如果排序需要 10^12 步,如果您的 CPU 每秒执行 10^8 步,排序会持续多少秒(或几小时)? 对长度为 n 的数组进行快速排序、归并排序或插入排序需要多少步?

回答以上所有问题会让您离回答您的问题更近一步。 去做吧,我保证,你马上就能回答。

插入排序和快速排序的最坏情况复杂度为 O(n^2)。

合并排序的最坏情况复杂度为 O(n*log(n))

因此,对于插入排序和快速排序没有。步骤数 (10^6)^2 = 10^12

所以需要 10^12/10^8 = 10^4 or 10,000 seconds = 2.77hrs(因为 CPU 运算 10^8 steps/sec)

哪里,没有。合并排序的步骤是 (10^6*log(10^6)) = 6*10^6 个步骤,需要 (6*10^6/10^8) = 0.06secs 个,小于 1

但视情况而定,选项 1 或 3 可能是正确的,此处插入排序可能需要不到 2.5 小时,具体取决于问题,因为插入排序的平均情况复杂度是 (N-1)*N/4 计算 运行 时间,我们得到 0.69hrs 小于 2.5 小时,所以第三个陈述是正确的。