Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie przez Kopcowanie

Ostatnio zmodyfikowano 2012-08-06 16:57
Autor Wiadomość
CodeMeister
» 2012-08-03 17:38:20
no fakt... morzowy :) potwór

@tirou - ja wogóle nie wiem jak się sortuje przez kopcowanie (a może jednak wiem tylko nazwy nie znam :) tylko że zwróciłem na to dzielenie int-ów przez dwa...
P-61661
tirou
Temat założony przez niniejszego użytkownika
» 2012-08-03 20:00:30
w sumie to jest algorytm podany na tej stronce
http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0017.php
 o sortowaniach, jednak nie rozumiem gdzie popelniam bład w moim kodzie.

Ja po prsotu ujałem go w funkcje. Jeżeli ktoś inteligentny i oznajmiony z C++ chciałby się nauczyc sortować przez kopcowanie oraz przesledzic mój kod. Z góry serdecznie dziękuję.
P-61671
kamillo121
» 2012-08-05 01:43:23
Witam, Twój kod to nie jest kod objęty funkcjami z podanej strony. Jeżeli decydujesz się na objęcie czyjegoś kodu funkcjami musisz też przyjąć założenia programu napisanego przez kogoś. Przepisałeś cały kod ale w kilku miejscach prawdopodobnie zmieniłeś po swojemu albo omyłkowo napisałeś inaczej.

Twój kod:
C/C++
#include <iostream>
#include <cstdlib>
using namespace std;
void budujkop( int[], int );
void rozlozkop( int[], int );
void sort( int[], int n );
void swap( int &, int & );

int main()
{
    const int n = 20;
    int d[ n ];
    for( int i = 0; i < n; i++ )
    { d[ i ] = rand() % 10;
        cout << d[ i ] << " ";
       
    }
    sort( d, n );
    cout << "\nPosortowana: \n\n";
    for( int i = 0; i < n; i++ )
    { cout << d[ i ] << " ";
    }
   
   
}

Zamień na:

C/C++
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void budujkop( int[], int );
void rozlozkop( int[], int );
void sort( int[], int n );
void swap( int &, int & );
int main()
{ srand(( unsigned ) time( NULL ) );
    const int n = 20;
    int d[ n + 1 ];
    for( int i = 1; i <= n; i++ )
    { d[ i ] = rand() % 10;
        cout << d[ i ] << " ";
       
    }
    sort( d, n );
    cout << "\nPosortowana: \n\n";
    for( int i = 1; i <= n; i++ )
    { cout << d[ i ] << " ";
    }
   
   
}


Twój kod:
C/C++
if(( k + 1 < i ) &&( d[ k + 1 ] > d[ k ] ) ) int m = k + 1;
else m = k;



zamień na:

C/C++
if(( k + 1 < i ) &&( d[ k + 1 ] > d[ k ] ) ) m = k + 1;
else m = k;

P-61776
tirou
Temat założony przez niniejszego użytkownika
» 2012-08-05 15:52:47
Jeśli mogę zadać pytanie, dlaczego inicjalizujemy tablica
d[n+1]
 ? Bo z tym się wiąże późniejsze zaczęcie odliczania w pętli od
i=1; i<=n
 Dlaczego zaczynamy od 1 a nie tak jak w c++ od 0 (tak jak odliczane są tablice ?)
P-61789
mostrom
» 2012-08-05 16:27:59
W c++ 5/2 = 2, a nie 3

A przy inicjowaniu piszesz rzeczywisty wymiar tablicy, np
int tabl[ 6 ];
 oznacza że tabl jest tablicą sześciu elementów typu int, ale dostęp do tych elementów masz po wpisaniu indeksu liczonego od 0, np
C/C++
for( int i = 0; i < 6; i++ ) {
    tabl[ i ] = i; //przypisanie wartosci
}
P-61790
tirou
Temat założony przez niniejszego użytkownika
» 2012-08-05 19:28:47
@up - to co napisales jest oczywiste, tlyko nie rozumiem dlaczego kamillo zmienił mi kod, zwiększając ilość elementów tablicy o 1 (nie rozumiem na co to wpływa )

@edit. Może to wynika z tego, iż nie dokońca rozumuje to sortowanie. tzn rozumiem algorytm ale nie potrafię go zaimplementowac ;(
P-61809
kamillo121
» 2012-08-06 00:41:42

@up - to co napisales jest oczywiste, tlyko nie rozumiem dlaczego kamillo zmienił mi kod, zwiększając ilość elementów tablicy o 1 (nie rozumiem na co to wpływa )

@edit. Może to wynika z tego, iż nie dokońca rozumuje to sortowanie. tzn rozumiem algorytm ale nie potrafię go zaimplementowac ;(


Powiem Ci tyle(nawet nie wgłębiając się w sam algorytm sortowania), wynika to z tego, że autor algorytmu tak zorganizował kod. Twój problem polega na tym, że przepisałeś czyjś kod ale chyba nie zaznajomiłeś się z kodem i z samym algorytmem. Radzę najpierw poczytać o tym algorytmie, o jego sposobie działania a po tym dokładnie prześledzić kod. Ja wprowadziłem zmiany które spowodowały to, że algorytm działa prawdopodobnie poprawnie.
Tak powracając to tak szczerze Ci powiem, że jeżeli rozumiesz algorytm na 90% to raczej go w ogóle nie rozumiesz.
Zrozum go w 100% i wtedy zabierz się za kodowanie.
P-61827
tirou
Temat założony przez niniejszego użytkownika
» 2012-08-06 16:57:59
Tak wprowadziłeś zmiany, które spowodowały że program działa poprawnie, dziekuje ci za to i prześledze go.
P-61859
1 « 2 »
Poprzednia strona Strona 2 z 2