algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm Hoare'a - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 27 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Algorytm Hoare/Project1.dpr:
//algorytm Hoare'a
//www.algorytm.org
//Tomasz Lubiński (c)2003

program Project1;

uses
  SysUtils;

{$R *.RES}
{$Apptype Console}

var
 n,i,j,k,w: Integer;
 c: Array [1..100] of Integer;

function partition(var c: Array of Integer; a,b: Integer): Integer;
var
 e,tmp: Integer;
begin
//nalezy odjac 1 bo c przekazywane przez parametr ma indeksy od 0
//a w ciele programu ktory ja wywolal ma indeksy od 1
a:=a-1;
b:=b-1;
e:=c[a];        //elemennt dzielacy
while a<b do
        begin
        while ((a<b) and (c[b]>=e)) do b:=b-1;
        while ((a<b) and (c[a]<e)) do a:=a+1;
        if (a<b) then
                begin
                tmp:=c[a];
                c[a]:=c[b];
                c[b]:=tmp;
                end;
        end;
//należy dodac jeden do wyniku bo c na ktorym byly wykonane obliczenia
//jest przekazywane przez parametr i ma indeksy od 0
//a w ciele programu ktory ja wywolal ma indeksy od 1
partition:=a+1;
end;

begin
writeln('Podaj liczbe elementow ciagu');
readln(n);
for i:=1 to n do
        begin
        writeln('Podaj '+IntToStr(i)+' element ciagu');
        readln(c[i]);
        end;
writeln('Podaj ktory element obliczyc');
readln(w);
//algorytm Hoare'a
i:=1;
j:=n;
n:=w;
while (i<>j) do
begin
        k:=partition(c,i,j);
        k:=k-i+1;
        if k>=w then
                j:=i+k-1;
        if k<w then
                begin
                w:=w-k;
                i:=i+k
                end;
end;
writeln(IntToStr(n)+' element ciagu to '+IntToStr(c[i]));
readln;
end.
Dodaj komentarz