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