算法是如何被分析的?为什么快速排序具有 O(n^2)
的最坏情况性能,而归并排序具有 O(n log(n))
的最坏情况性能?
算法是如何被分析的?为什么快速排序具有 O(n^2)
的最坏情况性能,而归并排序具有 O(n log(n))
的最坏情况性能?
这是算法课程的入门分析材料。
定义了一个操作(例如乘法),并以空间或时间为单位进行分析。
该操作按照空间或时间计数。通常,分析是以时间作为输入大小的依赖变量进行的。
示例伪代码:
foreach $elem in @list
op();
endfor
将执行n次操作,其中n是@list
的大小。如果您不相信,请自己数一下。
要分析快速排序和归并排序需要相当程度的数学素养。粗略地说,您需要解一个从递归关系导出的离散微分方程。
如果输入数组已排序,则快速排序将仅成为一种选择排序!因为您实际上并没有真正地分割数组...您只是在每个循环中选择第一个项目
另一方面,无论其内容如何,归并排序始终会以相同的方式划分输入数组!
还要注意:在分治法中,当分割长度-几乎-相等时,性能最佳!