Задача. Неправильная сортировка

Вася, решая предыдущую задачу, написал следующую программу:

const nmax=100;

var a:array[1..nmax] of integer;
    n:integer;


procedure swap(var x,y:integer);
  begin
  x:=x+y;
  y:=x-y;
  x:=x-y;
  end;

procedure readdata;
  var i:integer;
  begin
  read(n);
  for i:=1 to n do read(a[i]);
  end;

function min(q,w:integer):integer;
  var i,j:integer;
  begin
  j:=a[q];
  for i:=q+1 to w do
    if a[i]<a[j] then j:=i;
  min:=j;
  end;

procedure sort;
  var i,j:integer;
  begin
  for i:=1 to n-1 do begin
    j:=min(i,n);
    swap(a[i],a[j]);
    end;
  end;

procedure writedata;
  var i:integer;
  begin
  for i:=1 to n do write(a[i],' ');
  end;

BEGIN
readdata;
sort;
writedata;
END.

Вася использовал метод сортировки выбором минимумов - на каждом шаге он в оставшейся части массива (c i-го по n-ый элемент) находит наименьший элемент, и ставит его на i-ое место, а элемент с i-го места - на место найденного элемента, таким образом, после шага номер i первые i элементов оказываются на своих местах.

Написав программу, Вася ввел тест из условия задачи:

5
3 1 2 4 2
и убедился, что программа работает верно.

Однако оказывается, что в некоторых случаях программа выдает неверный ответ. Задание: