Быстрая сортировка матрицы - Pascal ABC
Формулировка задачи:
Помогите пожалуйста, необходимо отсортировать в матрице строки по возрастанию элементов в первом столбце методом быстрой сортировки
Решение задачи: «Быстрая сортировка матрицы»
textual
Листинг программы
const nmax=10;
type mas=array[1..nmax] of integer;
mtr=array[1..nmax] of mas;
procedure sort(l,r:integer;var a:mtr);
var i,j,x,m:integer;
t:mas;
begin
i:=l;
j:=r;
m:=(l+r)div 2;
x:=a[m][1];
repeat
while a[i][1]<x do inc(i);
while a[j][1]>x do dec(j);
if i<=j then
begin
t:=a[i];
a[i]:=a[j];{меняем строки}
a[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j,a);
if i<r then sort(i,r,a);
end;
var a:mtr;
m,n,i,j:byte;
begin
randomize;
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i][j]:=random(20);
write(a[i][j]:4);
end;
writeln;
end;
sort(1,m,a);
writeln('Отсортированная матрица:');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i][j]:4);
writeln;
end;
end.
Объяснение кода листинга программы
- const nmax=10; - задает максимальное количество строк и столбцов в матрице
- type mas=array[1..nmax] of integer; - определяет тип массива mas, который содержит целые числа
- procedure sort(l,r:integer;var a:mtr); - определяет процедуру сортировки матрицы
- var i,j,x,m:integer; - определяет переменные для индексов и временную переменную для разделения матрицы
- t:mas; - определяет временный массив t для обмена элементов
- repeat
- write('Количество строк до ',nmax,' m='); - выводит сообщение о количестве строк
- readln(m); - читает введенное значение
- repeat
- write('Количество столбцов до ',nmax,' n='); - выводит сообщение о количестве столбцов
- readln(n); - читает введенное значение
- until n in [1..nmax]; - повторяет чтение до тех пор, пока n не будет в пределах от 1 до nmax
- writeln('Исходная матрица:'); - выводит исходную матрицу
- for i:=1 to m do
- begin
- for j:=1 to n do
- begin
- a[i][j]:=random(20); - присваивает случайное число каждой ячейке матрицы
- write(a[i][j]:4); - выводит число на экран
- end;
- writeln; - перенос строки
- end;
- sort(1,m,a); - сортирует матрицу
- writeln('Отсортированная матрица:'); - выводит отсортированную матрицу
- for i:=1 to m do
- begin
- for j:=1 to n do
- write(a[i][j]:4); - выводит число на экран
- writeln; - перенос строки
- end;
- end.