Porzadkowanie prostej struktury plaszczyzny kartezianskiej metoda sortowania bombelkowego
Ostatnio zmodyfikowano 2016-12-30 14:08
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 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. void porzadkowanie_OX( punkty * tab ) { 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++ ) { 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 ] ); } } } for( int i = o - 1; i < p; i++ ) { cout << "Nazwa:" << tab[ i ].nazwa; cout << "\tX: " << tab[ i ].x; cout << "\tY:" << tab[ i ].y << endl; } }
|
|
mokrowski |
» 2016-12-29 21:17:26 Masz złą implementację sortowania w 2 (wewnętrznej) pętli. |
|
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". 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 ] ); } } }
|
|
mokrowski |
» 2016-12-30 13:57:23 #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ą". |
|
blankow Temat założony przez niniejszego użytkownika |
» 2016-12-30 14:08:57 Problem rozwiazny: 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 ] ); } } }
|
|
« 1 » |