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

Porzadkowanie prostej struktury plaszczyzny kartezianskiej metoda sortowania bombelkowego

Ostatnio zmodyfikowano 2016-12-30 14:08
Autor Wiadomość
blankow
Temat założony przez niniejszego użytkownika
Porzadkowanie prostej struktury plaszczyzny kartezianskiej metoda sortowania bombelkowego
» 2016-12-29 17:49:54
Opis problemu:
Tak jak w tytule. Stworzylem strukture
C/C++
struct punkty
{
    int x, y;
    char nazwa;
};

nastepnie wrzucilem ja w tablice dynamiczna wylosowalem wspolrzedne oraz przypisalem nazwy-urzytkownik decyduje ile tych punktow ma byc.
Problem zaczyna sie kilka funkcji dalej gdzie mam uporzadkowac punkty wzgledem OX.
Wymysllem ze zrobie to metoda bombelkowa. Niestety jednak nie dzieje sie to czego bym oczekiwal. Raz petla sie nie wykonuje raz wykonuje sie zbyt mala ilosc razy ale nigdy nie zaczyna sortowac wiec zakladam ze to z nia jest problem. Jesli ktorys z uzytkownikow bylby w stanie pomoc mi w znalezieniu i omowieniu bledu bylbym bardzo zobowiazany. Spedzilem nad tym problem juz troche czasu poczytalem w interenecie i nadal nic wiec obawiam sie ze odeslanie do innego kodu/artykulu nie pomoze mi zbyt wiele. Jesli masz czas i ochote zajrzyjmy zatem do kodu.



C/C++
void porzadkowanie_OX( punkty * tab ) // punkty *tab to tablica struktur z OX OY i numerem punktu
{
    cout << "Jaki zakres punktow wedlug osi X chcesz porzadkowac?" << endl; cout << "Chce zaczac od: ";
    int o; cin >> o; cout << endl; cout << "chce skonczyc na: "; int p; cin >> p;
   
    for( int f = tab[ o - 1 ].x; f < tab[ p - 1 ].x; f++ ) // stadartowe sortowanie bombelkowe -1 pojawia sie z racji tego ze numeruje od 1 a tablice jak wiadomo sa od 0.
    {
        for( int g = tab[ o - 1 ].x; g < tab[ p - 1 ].x; g++ )
        {
            if( tab[ g ].x > tab[ g + 1 ].x )
            {
                swap( tab[ g ], tab[ g + 1 ] ); // tu zamieniam cala "strukture"(tak sie to nazywa?) tzn np 3(X,Y) zamieniam z 5(X,Y)
            }
        }
    }
    for( int i = o - 1; i < p; i++ )
    {
        cout << "Nazwa:" << tab[ i ].nazwa; cout << "\tX: " << tab[ i ].x; cout << "\tY:" << tab[ i ].y << endl; // tu chcialbym wyswietlic punkty po zamianie
    }
}
P-155656
mokrowski
» 2016-12-29 21:17:26
Masz złą implementację sortowania w 2 (wewnętrznej) pętli.
P-155665
blankow
Temat założony przez niniejszego użytkownika
» 2016-12-30 12:58:30
jestes pewien?
zbudowalem dla pewnosci druga petle na "zwyklych" liczbach
i wedlug mnie jest ok.  Prosty sposob zapamietania-petle sa jednakowe tylko zmieniaja sie te "przyslowiowe i na j".

C/C++
for( int i = 0; i < 4; i++ )
{
    for( int j = 0; j < 4; j++ )
    {
        if( tab[ j ] > tab[ j + 1 ] )
        {
            swap( tab[ j ], tab[ j + 1 ] );
        }
    }
}
P-155687
mokrowski
» 2016-12-30 13:57:23
C/C++
#include <iostream>

using namespace std;

void bubblesort( int table[], size_t size )
{
    for( size_t i = 0; i < size - 1; ++i )
    {
        for( size_t j = 0; j < size - 1 - i; ++j )
        {
            if( table[ j ] > table[ j + 1 ] )
            {
                swap( table[ j ], table[ j + 1 ] );
            }
        }
    }
}

int main()
{
    int table[] = { 12, 30, 44, 31, 5, 4 };
    bubblesort( table, 6 );
    for( const auto & val: table )
    {
        cout << val << " ";
    }
    cout << endl;
}

Jeśli chodzi o wersję "bardzo klasyczną".
P-155691
blankow
Temat założony przez niniejszego użytkownika
» 2016-12-30 14:08:57
Problem rozwiazny:

C/C++
for( int f = o - 1; f < p - 1; f++ )
{
    for( int g = o - 1; g < p - 1; g++ )
    {
        if( tab[ g ].x > tab[ g + 1 ].x )
        {
            swap( tab[ g ], tab[ g + 1 ] );
        }
    }
}
P-155692
« 1 »
  Strona 1 z 1