Задать вопрос
@hagirangi

Почему не работает 'Быстрая сортировка'?

Вообщем пишу быструю сортировку переписываю как из интернета, но она не работает.
я хороший человек,и спрятал код в спойлеры

procedure quicksort(var d:mass; n:integer);
PROCEDURE sort(l,r:integer);
var i,j,k:integer; b:integer;
    b1,x:real;
begin
        i:=l;
        j:=r;
        k:=(l+r) div 2;
        x:=d[k].res;
        repeat
            while d[i].res<x do inc(i);
            while d[j].res>x do dec(j);
            if i<=j
            then begin
            b1:=d[i].res;
            d[i].res:=d[j].res;
            d[j].res:=b1;
            b:=d[i].ch;
            d[i].ch:=d[j].ch;
            d[j].ch:=b;
            b:=d[i].zn;
            d[i].zn:=d[j].zn;
            d[j].res:=b;
            inc(i);
            dec(j);
            end;
        until i>j;
        if i<r
        then sort(i,r);
        if j>l
        then sort(l,j);
end;

вызов
begin
sort(1,k);
end.

Помогите решить проблему
type rec=record
     ch:integer;
     zn:integer;
     res:real;
     end;
type mass=array [1..19819] of rec;
var d:mass;
    n,zn,ch,k,i,z,b,c,c1:integer;
    f:boolean;
    b1:real;
function gcd(x,y:integer):integer;
begin
     if y=0
     then gcd:=x else gcd:=gcd(y,x mod y);
end;
procedure quicksort(var d:mass; n:integer);
PROCEDURE sort(l,r:integer);
var i,j,k:integer; b:integer;
    b1,x:real;
begin
        i:=l;
        j:=r;
        k:=(l+r) div 2;
        x:=d[k].res;
        repeat
            while d[i].res<x do inc(i);
            while d[j].res>x do dec(j);
            if i<=j
            then begin
            b1:=d[i].res;
            d[i].res:=d[j].res;
            d[j].res:=b1;
            b:=d[i].ch;
            d[i].ch:=d[j].ch;
            d[j].ch:=b;
            b:=d[i].zn;
            d[i].zn:=d[j].zn;
            d[j].res:=b;
            inc(i);
            dec(j);
            end;
        until i>j;
        if i<r
        then sort(i,r);
        if j>l
        then sort(l,j);
end;
begin
     readln(n);
     k:=0;
     for zn:=2 to n do begin
         for ch:=1 to zn-1 do
         begin
         if (zn mod ch<>0) or (ch=1) 
         then begin
             if gcd(ch,zn)=1
             then begin inc(k); d[k].ch:=ch; d[k].zn:=zn; d[k].res:=ch/zn; end;
         end;
         end;
         end;
         z:=k;
         sort(1,k);
     for i:=1 to k do
         writeln(d[i].ch,'/',d[i].zn);
end.


весь код
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Вызывать ее надо по другому. Создать массив и указать его как аргумент в quicksort(..)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы