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;
问题是,有序的数组并不完全 结果是这样的:
最佳答案
您太早执行以下作业:
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;
关于algorithm - 二进制插入排序算法重复输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777073/