Сортировка двумерного массива - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Помогите отсортировать двумерный массив таким образом. И сходный масссив 5 6 3 3 8 6 3 1 19 16 5 2 21 31 12 1 3 31 12 3 И начинаем сортировать по последнему столбцу, далее по третьему (предпоследнему), далее по второму, и далее по первому. Т.е. результатом должно стать: 8 6 3 1 21 31 12 1 19 16 5 2 5 6 3 3 3 31 12 3 Заранее благодарен за ответ.

Решение задачи: «Сортировка двумерного массива»

textual
Листинг программы
type
  TIntMatrix = array of array of Integer;
  TCmpLineFunc = function(const m: TIntMatrix; i, j: Integer): Integer;
procedure mSortLines(var m: TIntMatrix; Cmp: TCmpLineFunc);
var
  i, j: Integer;
  t: array of Integer;
begin
  for i:=High(m) downto Low(m)+1 do
    for j:=Low(m)+1 to i do
      if Cmp(m,j-1,j)>0 then begin
        t:=m[j-1]; m[j-1]:=m[j]; m[j]:=t;
      end;
end;
function Cmp(const m: TIntMatrix; i, j: Integer): Integer;
var k: Integer;
begin
  k:=High(m[0]); while (k>=Low(m[0])) and (m[i,k]=m[j,k]) do Dec(k);
  if k<Low(m[0]) then Cmp:=0 else Cmp:=m[i,k]-m[j,k];
end;
procedure mWrite(const m: TIntMatrix; W: Integer);
var i, j: Integer;
begin
  for i:=Low(m) to High(m) do begin
    for j:=Low(m[i]) to High(m[i]) do Write(m[i,j]:W); WriteLn;
  end;
end;
var
  m, n, i, j: Integer;
  a: TIntMatrix;
begin
  Randomize;
  Write('Введите m и n: '); ReadLn(m,n);
  SetLength(a,m,n);
  for i:=Low(a) to High(a) do for j:=Low(a[i]) to High(a[i]) do
    a[i,j]:=Random(100);
  WriteLn('A='); mWrite(a,4);
  mSortLines(a,@Cmp);
  WriteLn('A''='); mWrite(a,4);
end.

Объяснение кода листинга программы

  1. Объявление типа данных TIntMatrix для двумерного массива целых чисел
  2. Объявление процедуры mSortLines для сортировки строк массива m, используя функцию сравнения Cmp
  3. Объявление функции Cmp для сравнения элементов массива m
  4. Объявление процедуры mWrite для вывода элементов массива m на экран
  5. Объявление переменных m, n, i, j, a для выполнения задачи
  6. Инициализация генератора случайных чисел
  7. Ввод размеров массива m и n с помощью функции ReadLn
  8. Создание двумерного массива a с помощью функции SetLength
  9. Заполнение массива a случайными числами с помощью цикла
  10. Вывод массива a на экран с помощью функции mWrite
  11. Сортировка строк массива a с помощью процедуры mSortLines
  12. Вывод отсортированного массива a на экран с помощью функции mWrite
  13. Конец программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы