В поразрядной сортировке применить компаратор.

На эту запись поступили жалобы от сообщества, поэтому она временно скрыта.

Чтобы было нормальное форматирование кода, начинайте его и завершайте строкой, содержащей три символа ` подряд (клавиша, где тильда и ё). А такой текст, как Вы привели, читать вряд ли кто-то станет…

function comp(a, b: Integer; d:integer := 1) :=
  a div d mod 10
  >
  b div d mod 10;

procedure sortradix(a: array of Integer);
begin
  //SetLength(a, n);
  var d := 1;
  a.Select(x -> Format('{0,5}', x)).Println;
  repeat
    var theEndSwap := a.Length - 1;
    repeat
      var predEndSwap := theEndSwap;
      theEndSwap := 0;
      for var i := 0 to predEndSwap - 1 do
        if comp(a[i], a[i+1], d) then
        begin
          swap(a[i], a[i + 1]);theEndSwap := i;
        end;
    until theEndSwap = 0;
    
    a.Select(x -> Format('{0,5}', x)).Println;
    d *= 10;
  until d > a.Max;
end;

Кстати var-параметры вы используете зря тут, их имеет смысл использовать только когда передаёте большой объём кода, к примеру объёмной записью.

И if a>b then result := true else result := false это 1 из тех вещей про которые обычно шутят :wink: result := a > b лучше.

Большое спасибо!

А зачем скрывать то, пусть останется, кому то будет интересно почитать…