2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Сортировка слиянием, Pascal
Сообщение15.12.2009, 01:05 


03/02/07
254
Киев
Надо отсортировать строки матрицы по невозрастанию их наибольших элементов
Написал такую программу
Код:
{$F+}
program sortmatr;
uses crt;
const n=4;m=4;
type matr=array[1..n,1..m] of real;
type func=function(a:matr;i:byte):real;
var a:matr;

function maxl(a:matr;i:byte):real;
var j:byte;x:real;
begin
x:=a[i,1];
for j:=1 to m do
if a[i,j]>x then x:=a[i,j];
maxl:=x;
end;

procedure output(a:matr);
var i,j:byte;
begin
for i:=1 to n do begin
for j:=1 to m do
write('a[',i,',',j,']=',a[i,j]:1:1,' ');
writeln;
end;
end;

procedure MergeSort( a:matr;f:func);
procedure Merge(var a,b:matr;size:byte);
var i,j,k,r1,r2,l:byte;
begin
k:=1;
while k<=n do begin
i:=k; r1:=i+size-1;
if r1>n then r1:=n;
j:=r1+1; r2:=j+size-1;
if r2>n then r2:=n;
while ((i<=r1)and(j<=r2)) do begin
  if f(a,i)<=f(a,j) then begin
  for l:=1 to m do b[k,l]:=a[i,l];
  i:=i+1;
  end
  else begin
  for l:=1 to m do b[k,l]:=a[j,l];
  j:=j+1;
  end;
  k:=k+1;
  end;
  while i<=r1 do begin
  for l:=1 to m do b[k,l]:=a[i,l];
  i:=i+1;
  k:=k+1;
  end;
  while j<=r2 do begin
  for l:=1 to m do b[k,l]:=a[j,l];
  j:=j+1;
  k:=k+1;
  end;
  end;
  end;
var i,size:byte; b:matr;
begin
i:=0; size:=1;
repeat
i:=i+1;
if i mod 2=1 then merge(a,b,size)
else merge(b,a,size);
size:=size*2;
until size>=n;
if (i mod 2=1) then a:=b;
end;

procedure input(var a:matr);
var i,j:byte;
begin
for i:=1 to n do begin
  for j:=1 to m do begin
  write('a[',i,',',j,']=');
  read(a[i,j]);
  end;
  writeln;
  end;
  end;



begin
clrscr;
input(a);
mergesort(a,maxl);
output(a);
readln;
end.

но она не сортирует вообще
Алгоритм брал из лекций

 Профиль  
                  
 
 Re: Сортировка слиянием, Pascal
Сообщение17.12.2009, 07:43 
Заслуженный участник


26/07/09
1559
Алматы
2Trius
Извините, лень разбираться с ваши кодом, но может быть попробовать заменить procedure MergeSort( a:matr;f:func) на procedure MergeSort(var a: matr; f: func)? Вдруг сработает... :)

 Профиль  
                  
 
 Re: Сортировка слиянием, Pascal
Сообщение17.12.2009, 18:01 


03/02/07
254
Киев
Circiter в сообщении #272314 писал(а):
2Trius
Извините, лень разбираться с ваши кодом, но может быть попробовать заменить procedure MergeSort( a:matr;f:func) на procedure MergeSort(var a: matr; f: func)? Вдруг сработает... :)

я вас понимаю :D
вроде до этого заменял, и не работало, а сейчас заработало :D
Спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group