【发布时间】:2013-03-11 17:45:30
【问题描述】:
只考虑冒泡排序和归并排序。对于冒泡排序,时间复杂度为 O(n),最坏情况为 O(n^2),空间复杂度为 O(1)。对于归并排序,时间复杂度为 O(nlogn),空间复杂度为 O(n)。如果输入的大小小于 1000,您会选择哪种类型,为什么? 1000多呢?
这是我的一个面试问题。只是想知道你们会怎么回答。
【问题讨论】:
-
您选择什么取决于您用来评估的标准。对于一小部分,我会选择“最快速的代码干净”,而不要介意任何性能考虑。这听起来非常像家庭作业......
-
取决于很多事情。例如,你有多少内存?你是在内存还是文件中排序?数据是否可能接近排序?并行是一种选择吗?
-
input is less than 1000- 只需使用冒泡排序或任何 O(n^2) 排序算法,如果它对您来说更简单编码。What about more than 1000Mergesort/Quicksort 甚至是 Quick Sort + Insertion Sort 的混合体。 -
冒泡排序也有线性内存复杂度。您必须在某个时候将数组放入内存中。
-
@double_squeeze 但它可以与输入重叠。再说一次,还有归并排序的就地变体,但这不再是 O(n log n)。
标签: performance algorithm sorting memory complexity-theory