Отсортировать строки двумерного массива вещественных чисел методом быстрой сортировки - Turbo Pascal

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

отсортировать строки двумерного массива вещественных чисел по значению элемента первого столбца методом быстрой сортировки.

Код к задаче: «Отсортировать строки двумерного массива вещественных чисел методом быстрой сортировки - Turbo Pascal»

textual
uses crt;
const nmax=20;
type mas=array [1..nmax] of real;
     mtr=array[1..nmax] of mas;
 
var x:mtr;
    s,p:integer;
procedure sort(l,r:integer);
var i,j,m: integer;
    x1:real;
    y1:mas;
begin
  i:=l;
  j:=r;
  m:=round ((l+r)/2);
  x1:=x[m,1];
  repeat
    while x[i,1]<x1 do
     begin
      inc(i);
      inc(s); {сравниваем}
     end;
    while x[j,1]>x1 do
     begin
      dec(j);
      inc(s);{сравниваем}
     end;
    if i<=j then
     begin
      y1:=x[i];
      x[i]:=x[j];
      x[j]:=y1;
      inc(i);
      dec(j);
      inc(p);{переставляем}
     end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;
var n,m,i,j:integer;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    x[i,j]:=10*random;
    write(x[i,j]:5:2);
   end;
  writeln;
 end;
writeln;
sort(1,n);
writeln('Матрица после сортировки: ');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(x[i,j]:5:2);
  writeln;
 end;
write('Количество сравнений=',s,' перестановок=',p);
readln
end.

5   голосов, оценка 3.800 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы