我目前正在阅读N. Wirths的文章:算法+数据结构=程序。我不确定,但是我认为所提供的直接插入排序的分析中可能会出错。相关段落的屏幕截图在此处:screenshot
type index = 0..n
var a: array[0..n] of item
procedure straightinsertion
var i,j: index; x: item;
begin
for i := 2 to n do
begin x := a[i]; a[0] := x; j := i-1;
while x.key < a[j].key do
begin a[j+1] := a[j]; j := j-1;
end;
a[j+1] := x
end
end
我认为,比较次数的分析可能是错误的。他声称,第C_i
个筛选中的键比较数i
最多为i-1
。但是不是i
吗?因为在最坏的情况下,由于我们使用的是哨兵,所以我们也必须与哨兵进行额外的比较。我声称:
C_min = n-1
C_ave = 1/4 * (n^2 + 3n - 4)
C_max = 1/2 * (n^2 + n) -1
移动数M_i
应为(i-1)+2
。我相信M_min, M_ave, M_max
是正确的文字(截图)。
能否请您确认我是对的还是我想念的东西?非常感谢!