Сортировка двумерного массива - 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
- Конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д