Jak poprawnie wykonać sortowanie bąbelkowe?

0

Witam!

Mam do napisania w C++ sortowanie bąbelkowe malejące w liście dwukierunkowej.
Program działa poprawnie, jednak zostałem poproszony, żeby zamiast w metodzie main (gdzie sortuję w tablicy), stworzyć w klasie "Lista" metodę, która będzie sortowała wewnątrz tej klasy. Jak się do tego zabrać? Przeszukałem dokładnie internet, jednak nie znalazłem nigdzie odpowiedzi na moje pytanie. Poniżej umieszczam link do kodu programu:
http://pastebin.com/sqNEeG4D

Dziękuję za pomoc i rady :)

0

Z czym konkretnie masz problem?

0

Żeby to sortowanie wykonywało się wewnątrz klasy, a nie w metodzie main.

0

Czyżby problem z <Ctrl-X> i <Ctrl-V> ?

0

Tu nie chodzi o przeniesienie kodu wyżej, tylko przekształcenie go aby operował na elementach listy. Ja niestety zrobiłem unik wprowadzając elementy listy do tablicy i właśnie mi chodzi o to żeby było bez tego.

0

No to sortowanie będzie wyglądać podobnie jak na tablicy, przechodzisz n razy po liście i patrzysz czy sąsiedni element jest mniejszy/większy, i jak tak, to zamieniasz, ze swapem raczej sobie poradzisz, a jak nie, to pisz. I radzę wszystko pisać w funkcjach a nie w mainie.

0

Właśnie mi o takiego ze swapem chodziło. Widziałem gdzieś podobny w sieci, był on jednak dla sortowania w liście jednokierunkowej.

2

może nie pomogłem, ale popatrzeć warto:

0

Pomoże ktoś w problemie? :)

0

Mam pytanie czy w tym programie rozumiesz chociażby wiersz?

0

"Main" napisałem ja, natomiast reszta to kod z sieci. Rozumiem co to jest lista dwukierunkowa i sortowanie bąbelkowe. Nie potrafię jednak zaimplementować tego sortowania jako funkcja.

0

Jasne, więc wg mnie to źle zrozumiałeś zadanie.
Zadanie polegało na napisaniu (nie ściągnięciu z sieci) kodu listy oraz sortowania bąbelkowego do niej.
Więc wyrzuć to i napisz samą listę, w trakcie pisanie zdobędziesz odpowiednie umiejętności do napisania do niej sortowania.

0

Myślę, że pisanie od nowa programu jest bezsensu. Mam mało czasu, bo ten program muszę oddać jutro na zaliczenie. Potrzebuję w sumie tylko linijek odpowiedzialnych za sortowanie.

0

No to logicznie rzecz biorąc nie powinieneś zaliczyć. Bo nie nauczyłeś się, nie chcesz się nauczyć, ściągnąłeś i potrzebujesz ...

0

Mógłby ktoś sprawdzić poprawność? Czy ja w ogóle dobrze myślę? :)

void sortuj(T value) {
     int tmp;
     Element *tmp2=firstElement;
     while (tmp2->next!=NULL)tmp2=tmp2->next;
     for (Element *i=firstElement;i->next!=NULL;i=i->next) {
         for (Element *j=tmp2;j!=i;j=j->prev) {
			if (j->value>j->prev->value) {
                tmp=j->value;
                j->value=j->prev->value;
                j->prev->value=tmp;
                }           
                }
             }
         }

dodanie znacznika <code class="cpp"> - furious programming

0
  1. Po kiego masz T value?
  2. Czemu tmp jest typu int?
  3. Po kiego masz ten while?
0

Uczę się metodą prób i błędów. Dział forum chyba odpowiedni i mam tu chyba prawo do pytania i oczekiwania pomocy?

0

No to podałem ci naprowadzające pytania. Chcesz pomocy czy gotowca?

0

A jak to można inaczej zrobić?

1

@krzycho93 metoda prób i błędów nie wymusza wyłączenia myślenia. Kilka podstawowych zasad:

  1. Funkcja może pracować TYLKO na swoich argumentach lub zmiennych globalnych. Zmienne globalne są złe, więc możesz uznać że funkcja może pracować tylko na swoich argumentach. Metoda klasy może dodatkowo pracować na polach tej klasy. Koniec, kropka. Jeśli więc piszesz funkcję która ma sortować tablicę to MUSISZ do tej funkcji tą tablicę przekazać. Innej drogi nie ma. Ale przekazujesz w argumentach tylko to co ci jest potrzebne. Jak lista/tablica jest polem klasy to metoda sortująca nie potrzebuje żadnych dodatkowych argumentów (ale może jakieś mieć - na przykład informacje czy sortować rosnąco czy malejąco)
  2. Jak już bardzo chcesz zamykać to w klasy to zrób sobie tą przyjemność i dopisz na przykład operator porównania dla klasy Element. Bo takie tasiemce:
(j->value>j->prev->value)

Są błędogenne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1