for i:= 1 to 5 do
begin
temp := data[i];
bawah := 1;
atas := i;
k:=i;
while (bawah < atas) do
begin
tengah := (bawah + atas) div 2;
if (temp <= data[tengah]) then
atas := tengah
else
bawah := tengah + 1;
end;
while (k > atas) do
begin
data[k] := data[k - 1];
data[atas] := temp;
k-=1;
end;
end;
问题是,排序的数组并不完全 结果是这样的:
答案 0 :(得分:1)
您过早地执行以下任务:
data[atas] := temp;
在循环的下一次迭代中,k-1
的值将变为atas
,因此错误的值将被复制到data[k]
,从而导致重复并丢失原始值data[atas]
中的值。
因此将该行移出循环:只有在完成移位操作时才需要执行该行:
while (k > atas) do
begin
data[k] := data[k - 1];
k-=1;
end;
data[atas] := temp;