Pascal,解释一下这个循环是如何工作的

时间:2016-11-25 13:40:33

标签: arrays pascal

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是数组的长度) 。我不明白这个循环是如何工作的:(你能解释一下吗?(第一次问这里,请不要判断)

1 个答案:

答案 0 :(得分:1)

您的算法存在错误。
j := h;的行应该相反。 h是数组中具有最高值的索引,从i开始的位置开始计算。因此,当内循环完成时,索引h指向最大值。之后,您将看到pos ih之间的数组交换,以便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;