Сортировка двумерного массива - 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.
Объяснение кода листинга программы
- Объявление типа данных TIntMatrix для двумерного массива целых чисел
- Объявление процедуры mSortLines для сортировки строк массива m, используя функцию сравнения Cmp
- Объявление функции Cmp для сравнения элементов массива m
- Объявление процедуры mWrite для вывода элементов массива m на экран
- Объявление переменных m, n, i, j, a для выполнения задачи
- Инициализация генератора случайных чисел
- Ввод размеров массива m и n с помощью функции ReadLn
- Создание двумерного массива a с помощью функции SetLength
- Заполнение массива a случайными числами с помощью цикла
- Вывод массива a на экран с помощью функции mWrite
- Сортировка строк массива a с помощью процедуры mSortLines
- Вывод отсортированного массива a на экран с помощью функции mWrite
- Конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д