Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Sortowanie przez scalanie i sortowanie przez wstawianie



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Matii
Gość





PostWysłany: Pon Wrz 24, 2018 8:15 am  OP    Temat postu: Sortowanie przez scalanie i sortowanie przez wstawianie Odpowiedz z cytatem Pisownia

Witajcie
Co sądzicie o takiej metodzie sortowania przez scalanie ? Czy ma ona sens ? Czy przyśpiesza tradycyjne sortowanie przez scalanie ? Co prawda stworzyłem kod, który działa, jednak nie mogę w internecie znaleźć na niego odpowiedzi, więc chętnie wysłucham waszych opinii :).
Pozdro.

Kod:
uses Crt;
const
     n = 16; { liczba elementów tablicy }
     dlugosc = 8; { długość poszczególnych podtablic, wartości - 1,2,4,8 -> dla n = 16 }
var
   tab: array[1..n] of integer;
   i1,i2: integer;

procedure Polacz(lp,pp: integer);
var
   i,j,pom: integer;
begin
     { writeln('początek lewej tablicy: ',lp,' początek prawej tablicy: ',pp,' długość: ',abs(lp - pp)); }

     if abs(lp - pp) = dlugosc then
       for i := lp to (lp + (abs(lp - pp) * 2)  - 1) - 1 do
          if tab[i] > tab[i + 1] then
            begin
                 pom := tab[i + 1]; j := i;

                 while (pom < tab[j]) and (lp <= j) do
                      begin
                           tab[j + 1] := tab[j];
                           dec(j) { j := j - 1;}
                      end;
                 tab[j + 1] := pom;
            end
end;

procedure Podziel(p: integer; k: integer);
var
   s: integer;
begin
     s := (p + k) div 2;

     if p < k then
       begin
            Podziel(p,s);
            s := s + 1;
            Podziel(s,k);
            Polacz(p,s)
       end
end;

begin
     ClrScr;
     randomize;

     for i1 := 1 to n do
        begin
             tab[i1] := random(n);
             write(tab[i1],' | ':2)
        end;

     writeln;
     writeln('Działanie algorytmu:');

     i1 := 1; i2 := n;

     Podziel(i1,i2);

     {writeln;}

     for i1 := 1 to n do
        write(tab[i1],' | ':2)
end.
Powrót do góry
Matii
Gość





PostWysłany: Pon Wrz 24, 2018 2:17 pm  OP(?)    Temat postu: Sortowanie przez scalanie i sortowanie przez wstawianie Odpowiedz z cytatem Pisownia

Wersja druga nieco uproszczona :).
Kod:
uses Crt;
const
     n = 16; { liczba elementów tablicy }
     dlugosc = 8; { długość poszczególnych podtablic, wartości - 1,2,4,8 dla n = 16 }
var
   tab: array[1..n] of integer;
   i1,i2: integer;

procedure Polacz(lp,pp: integer);
var
   i,j,pom: integer;
begin
     writeln('początek lewej tablicy: ',lp:2,', początek prawej tablicy: ',pp:2,', długość: ',(pp - lp):2);

     if pp - lp <= dlugosc then
       for i := lp to (lp + ((pp - lp) * 2)  - 1) - 1 do
          if tab[i] > tab[i + 1] then
            begin
                 pom := tab[i + 1]; j := i;

                 while (pom < tab[j]) and (lp <= j) do
                      begin
                           tab[j + 1] := tab[j];
                           j := j - 1
                      end;
                 tab[j + 1] := pom;
            end
end;

procedure Podziel(p: integer; k: integer);
var
   s: integer;
begin
     s := (p + k) div 2;

     if p < k then
       begin
            Podziel(p,s);
            s := s + 1;
            Podziel(s,k);
            Polacz(p,s)
       end
end;

begin
     ClrScr;
     randomize;

     for i1 := 1 to n do
        begin
             tab[i1] := random(n);
             write(tab[i1],' | ':2)
        end;

     writeln;
     writeln;
     writeln('Działanie algorytmu:');
     writeln;

     i1 := 1; i2 := n;

     Podziel(i1,i2);

     writeln;
     writeln;

     for i1 := 1 to n do
        write(tab[i1],' | ':2)
end.
Powrót do góry
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.33721 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |