考虑整数数组,其大小为2 ^ N,其中索引X(0≤X<2N)处的元素是X xor 3(即,X的两个最低有效位被翻转)。在这个数组上插入排序的运行时间是多少?
答案 0 :(得分:1)
检查列表的结构:
对于n = 2:
{3,2,1,0}
对于n = 3:
{3,2,1,0,7,6,5,4}
对于插入排序,你保持不变量,从1到你当前索引的列表被排序,所以你在每一步的任务是将当前元素放在它之前的排序元素中的正确位置。在最坏的情况下,您必须先遍历所有先前的索引,然后才能插入当前值(考虑列表按反向排序顺序的情况)。但是从上面的结构中可以清楚地看到,对于具有属性的列表,每个值等于索引^ 3,列表中最远的,你必须从任何给定索引得到的是3.所以你减少了您可能需要在插入步骤中将O(n)工作变为常数因子。但你仍然需要做O(n)工作来检查列表的每个元素。因此,对于这种特殊情况,插入排序的运行时间在输入的大小上是线性的,而在最坏的情况下,它是二次的。