Binary insertion sort and complexity
我有一个关于在插入排序算法中使用二进制搜索的简单问题。更准确地说,在常规插入排序的每个步骤中,我们没有线性比较该元素与先前(排序的)子数组中的所有元素,而是仅在该排序的子数组中使用二进制搜索来查找该元素所属的位置。
我知道这减少了算法进行的比较次数(O(log n)而不是O(n)),但是每一步所需的交换次数仍然占主导地位,复杂度仍然为O(n ^ 2)。
我还知道,复杂度与运行时间并不那么容易。我试图比较两种算法的n值(数组大小)"小"值(最多约500000)的运行时间。二进制插入排序总是比通常的插入排序快。
两者均为O(n ^ 2)的事实告诉我,当n足够大时,运行时间应该相似,对吗?在这种情况下,有多少"足够大"才能真正看到相似的运行时间?
The fact that both are O(n^2) tells me that as n gets large enough, the running time should be similar, right?
小心-这不是真的。当
那么,说两个算法都是
复杂性不仅可以告诉您某个特定函数的行为,还可以告诉您该函数与其他函数的堆叠方式。例如,如果您知道函数是
理论上,二进制插入排序的复杂度为O(log_2(n!)),
Wolframalpha。
这在O(n2)和O(n log(n))之间,实际上更接近O(n log(n))。