[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 19.10.10
Prihlásený: 28.10.12
Príspevky: 41
Témy: 9 | 9

Zdravim, mam kod:

Kód:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;

// Trieda Item bude predstavovat jeden prvok zoznamu.
class Item {
public:
   // Hodnota prvku
   int value;
   // Smernik na dalsi prvok
   Item* next;

   // Konstruktor s 2 parametrami (ktore maju defaultne hodnoty)
   Item(int value = 0, Item* next = NULL) {

      this->value = value;
      this->next = next;
   }

   // Clenska funkcia = metoda triedy. Vypise hodnotu prvku na obrazovku.
   void print() {
      cout << value;
   }
};

// Trieda List predstavuje zretazeny zoznam.

class List {

public:

       // Smernik na prvy prvok. Ak je NULL, znamena to, ze mame prazdny zoznam.

       Item* first;

       List() {
          first = NULL;
        }

       List(int size, int min, int max){  //konstruktor
           first = NULL;
           srand(time(NULL));
           for(int i = 0; i < size; i++){
           
                   push_front(min + (rand() % (max-min+1)));
           }
       }

       ~List(){ // destruktor
            Item* current = first, *temp;
           
            while (current != NULL) {
               
                temp = current->next;
                delete current;
               
                current = temp;
            }
           
            this->first = NULL;
        }


       int size(){ //zistuje pocet prvkov zoznamu
           int i = 0;
           Item* current = first;
           
           while(current != NULL){
                         i++;
                         current = current->next;             
           }
           return i;
           
       }


       Item* merge(Item* first, Item* second){ //spaja dva utriedene zoznamy
              Item* third;
              Item* last;
               
             if(first->value >= second->value){
                     third=second;
                     second=second->next;
                     last=third;
             }
             else{
                 third=first;
                 first=first->next;
                 last=third;
             }
                     
             while(second != NULL && first != NULL){
                    if(first->value > second->value){
                             last->next=second;
                             second=second->next;
                             last=last->next;
                    }
                    else{
                         last->next=first;
                         first=first->next;
                         last=last->next;
                    }     
             }
             
             while(first == NULL && second != NULL){
                         last->next=second;
                         second=second->next;
                         last=last->next;
             }
                         
             while(second == NULL && first != NULL){
                          last->next=first;
                          first=first->next;
                          last=last->next;
             }
             
             return third;
             
       }
       
       Item* mergeSort(Item* prv, int velkost){
       
        Item* second = prv;
        Item* diss = prv;
        int polka = velkost / 2;

        if(velkost == 1 )
           return prv;

        for(int i=1; i <= polka; i++){
                 diss = second;
                 second=second->next;
                 }         
        diss->next = NULL;

        return (merge(mergeSort(prv, polka), mergeSort(second, polka)));
        }
       
       void sort(){

       int velkost = size();
       this->first = mergeSort(first, velkost);     
           
       }

};


Hacik je v tom, ze mi to sorti len v pripade, ze zretazeny zoznam obsahuje pocet prvkov rovny mocnine 2 - 2, 4, 8... inak niektore prvky jednoduche "zabudne" a zaradi ich inde, vie mi niekto pomoct prosim?


Offline

Užívateľ
Užívateľ
Zadrhel v mergesorte v zretazenom zozname v triede v C++

Registrovaný: 16.08.09
Prihlásený: 07.03.14
Príspevky: 186
Témy: 16 | 16
Bydlisko: Levice

Neštudoval som tvoj kód.
Ak to to pomôže, skús si pozrieť moju verziu:
http://codepad.org/CUEziIR0


_________________
"Najlepším spôsobom, ako sa na budúcnosť pripraviť, je vymyslieť si ju." - John Sculley
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 19.10.10
Prihlásený: 28.10.12
Príspevky: 41
Témy: 9 | 9
Napísal autor témyOffline : 25.03.2011 14:49 | Zadrhel v mergesorte v zretazenom zozname v triede v C++

Dakujem, ale toto mi nepomoze, potrebujem to na triedach v C++ a v tomto mam len jednu malu chybu pravdepodobne v deleni 2 v metode mergeSort, len ju neviem najst a opravit :(


 [ Príspevkov: 3 ] 


Zadrhel v mergesorte v zretazenom zozname v triede v C++



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicke pole v Triede C++

v Assembler, C, C++, Pascal, Java

1

2045

19.11.2008 14:51

Dark_Raven

V tomto fóre nie sú ďalšie neprečítané témy.

C- Vyčistenie jednej struktury v spajanom zozname

v Assembler, C, C++, Pascal, Java

7

389

08.12.2013 22:16

BX

V tomto fóre nie sú ďalšie neprečítané témy.

Menší zádrhel...

v Assembler, C, C++, Pascal, Java

1

343

26.10.2012 19:02

faraon

V tomto fóre nie sú ďalšie neprečítané témy.

Dokumentacia k phpbb template triede

v Redakčné systémy

4

683

28.06.2009 2:57

Blackshadow

V tomto fóre nie sú ďalšie neprečítané témy.

ako z JSP zavolat metodu v triede

v Assembler, C, C++, Pascal, Java

6

522

16.04.2008 17:05

m@-nX

V tomto fóre nie sú ďalšie neprečítané témy.

I/K: GPU v triede RTX 3070

v Kúpim

0

571

08.01.2023 20:17

jojinkho

V tomto fóre nie sú ďalšie neprečítané témy.

Pozadie vo vnorenom zozname

v HTML, XHTML, XML, CSS

2

439

13.04.2011 17:50

M4rek

V tomto fóre nie sú ďalšie neprečítané témy.

Problém v zozname programov

v Operačné systémy Microsoft

5

402

03.11.2010 19:08

jkphoenix

V tomto fóre nie sú ďalšie neprečítané témy.

thickbox v ul zozname

v JavaScript, VBScript, Ajax

0

325

21.02.2010 13:22

senty

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s menu v zozname

v HTML, XHTML, XML, CSS

8

491

17.02.2008 19:58

Creation

V tomto fóre nie sú ďalšie neprečítané témy.

Taktovanie Celerona Tualatin 1.0a @ 1,5 a jeden zádrhel

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Biosy a ladenie výkonu

47

2890

29.05.2007 11:29

Mir

V tomto fóre nie sú ďalšie neprečítané témy.

Zmena písmena disku (nie je v zozname)

v Operačné systémy Microsoft

3

329

17.02.2013 2:40

S1anley

V tomto fóre nie sú ďalšie neprečítané témy.

Ako pridať vlastnosti ovládacích prvkov, ktoré sú vytvorené v triede ASP.NET?

v Technológia .NET

1

578

20.05.2015 11:49

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Excel 2010 - obsah zoznamu podmieneny volbou v prvom zozname

v Ostatné programy

1

618

14.03.2014 12:55

jtbs

V tomto fóre nie sú ďalšie neprečítané témy.

ASUS Eee PC X101 - pri inštalácii Windowsu nie sú na zozname žiadne pevné disky

v Notebooky a netbooky

2

464

07.12.2014 17:57

KeNNi

V tomto fóre nie sú ďalšie neprečítané témy.

Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

796

08.07.2014 20:40

XOLOO



© 2005 - 2024 PCforum, edited by JanoF