Forum Coders' city Strona Gwna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UytkownicyUytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj si, by sprawdzi wiadomociZaloguj si, by sprawdzi wiadomoci   ZalogujZaloguj 

Potrzebuj szybkiej odpowiedzi na moje pytanie... Zasady

Sortowanie listy dwukerunkowej



 
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Algorytmy + inynieria oprogramowania
Zobacz poprzedni temat :: Zobacz nastpny temat  
Autor Wiadomo
Mariusz M
Go





PostWysany: Wto Maj 22, 2018 9:39 pm  OP    Temat postu: Sortowanie listy dwukerunkowej Odpowiedz z cytatem Pisownia

Znalazem funkcje realizujce sortowanie listy jednokierunkowej
Jak ustawi wskaniki na poprzedniki tak aby znalezione funkcje realizoway take
sortowanie list dwukierunkowych

Kod:


procedure split(head:PNode;var front,back:PNode);
var fast,slow:PNode;
begin
  if (head = NIL)or(head^.next = NIL)then
  begin
    front := head;
    back := NIL;
  end
  else
  begin
    slow := head;
    fast := head^.next;
    while fast <> NIL do
    begin
      fast := fast^.next;
      if fast <> NIL then
      begin
        slow := slow^.next;
        fast := fast^.next;
      end;
    end;
    front := head;
    back := slow^.next;
    slow^.next := NIL;
  end;
end;

procedure merge(var head:PNode;l1,l2:PNode);
var dummy,curr:PNode;
begin
  new(dummy);
  dummy^.next := NIL;
  curr := dummy;
  while(l1 <> NIL)and(l2 <> NIL)do
  if l1^.key < l2^.key then
  begin
    curr^.next := l1;
    curr := curr^.next;
    l1 := l1^.next;
  end
  else
      if l1^.key > l2^.key then
      begin
        curr^.next := l2;
        curr := curr^.next;
        l2 := l2^.next;
      end
      else
      begin
        curr^.next := l1;
        curr := curr^.next;
        l1 := l1^.next;
        curr^.next := l2;
        curr := curr^.next;
        l2 := l2^.next;
      end;
      if l1 = NIL then
        curr^.next := l2
      else
        curr^.next := l1;
      head := dummy^.next;
      dispose(dummy);
end;

procedure mergeSort(var head:PNode);
var h1,h2:PNode;
begin
  h1 := NIL;
  h2 := NIL;
  if (head <> NIL)and(head^.next <> NIL)then
  begin
    split(head,h1,h2);
    mergeSort(h1);
    mergeSort(h2);
    merge(head,h1,h2);
  end;
end;



Jak zmieniby si kod gdybymy zrezygnowali z uycia wartownika w funkcji scalajcej
Co zyskujemy wprowadzajc wartownika do funkcji scalajcej


Jeli chodzi o sortowanie przez podzia to znalazem algorytm dla tablic w przykadach Pascala
Jak go przepisa tak aby dziaa take dla listy
Zamian elementw chciabym zastpi wstawianiem i usuwaniem bo zamiana elementw lepiej
dziaa dla tablic

Znalazem te funkcje przydatne do sortowania drzewem BST
i wydaje si kod napisany z uyciem znalezionych funkcji dziaa
Powrt do gry
Wywietl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Algorytmy + inynieria oprogramowania Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Moesz pisa nowe tematy
Moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach
Moesz dodawa zaczniki na tym forum
Moesz pobiera pliki z tego forum




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

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