二进制插入排序算法重复输出
Binary Insertion Sort Algorithm Duplicate Output
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;
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;