Pascal,解释一下这个循环是如何工作的
Pascal, explain me how this loop work
procedure arranging;
var
i,j,h : integer;
c : real;
begin
for i := 1 to n - 1 do
begin
h := i;
for j := i + 1 to n do
If D[j] > D[h] then
j := h;
c := D[i];
D[i] := D[h];
D[h] := c;
end;
end;
这是我的pascal编程书上的循环,这个程序应该从大到小排列一个数组,数组在.txt文件中,已经有另一个程序可以读取它(N是一个数组的长度大批)。我不明白这个循环是如何工作的:(你能解释一下吗?(第一次在这里问,请不要判断)
你的算法有误。
带有 j := h;
的行应该做相反的事情。 h
是数组中具有最高值的索引,从 i
开始计算。所以当内循环完成后,索引h
指向最大值。之后,你会看到 pos i
和 h
之间的数组交换,使得 D[i] 具有最大值。
下一个内部循环从上一个位置之后的 1 个位置开始,并重复直到找到下一个最大值并将其放入数组中的正确位置。等等。
procedure arranging;
var
i,j,h : integer;
c : real;
begin
for i := 1 to n - 1 do // Loop all values but the last
begin
h := i; // <-- Assume largest value in index i
for j := i + 1 to n do // Loop from i+1 to last value
If D[j] > D[h] then
h := j; // <-- h points to largest array value so far
c := D[i]; // Save D[i] to a temporary storage
D[i] := D[h]; // Now swap values so D[i] has the largest value
D[h] := c;
end;
end;
procedure arranging;
var
i,j,h : integer;
c : real;
begin
for i := 1 to n - 1 do
begin
h := i;
for j := i + 1 to n do
If D[j] > D[h] then
j := h;
c := D[i];
D[i] := D[h];
D[h] := c;
end;
end;
这是我的pascal编程书上的循环,这个程序应该从大到小排列一个数组,数组在.txt文件中,已经有另一个程序可以读取它(N是一个数组的长度大批)。我不明白这个循环是如何工作的:(你能解释一下吗?(第一次在这里问,请不要判断)
你的算法有误。
带有 j := h;
的行应该做相反的事情。 h
是数组中具有最高值的索引,从 i
开始计算。所以当内循环完成后,索引h
指向最大值。之后,你会看到 pos i
和 h
之间的数组交换,使得 D[i] 具有最大值。
下一个内部循环从上一个位置之后的 1 个位置开始,并重复直到找到下一个最大值并将其放入数组中的正确位置。等等。
procedure arranging;
var
i,j,h : integer;
c : real;
begin
for i := 1 to n - 1 do // Loop all values but the last
begin
h := i; // <-- Assume largest value in index i
for j := i + 1 to n do // Loop from i+1 to last value
If D[j] > D[h] then
h := j; // <-- h points to largest array value so far
c := D[i]; // Save D[i] to a temporary storage
D[i] := D[h]; // Now swap values so D[i] has the largest value
D[h] := c;
end;
end;