Pomoc w sortowaniu bąbelkowym
Ostatnio zmodyfikowano 2013-04-18 18:48
CTRL85 Temat założony przez niniejszego użytkownika |
Pomoc w sortowaniu bąbelkowym » 2013-04-18 18:02:02 #include <iostream> #include <cstdlib>
using namespace std;
int ile = 1; string wpisane = ""; int * wiek; void wczytaj() { string temp = ""; getline( cin, temp ); ile = atoi( temp.c_str() ); wiek = new int[ ile ]; getline( cin, wpisane ); } void zamien() { int j = 0; string temp; for( int i = 0; i < wpisane.length(); i++ ) { if( wpisane[ i ] != ' ' ) { temp = temp + wpisane[ i ]; } if( wpisane[ i ] == ' ' || i == wpisane.length() - 1 ) { wiek[ j ] = atoi( temp.c_str() ); temp = ""; j++; } } } void sortuj() { int * temp = new int[ ile ]; int najw = 0; for( int i = 0; i < ile; i++ ) { for( int g = 0; g < ile - 1; g++ ) { if( wiek[ g ] > wiek[ g + 1 ] ) { najw = wiek[ g ]; wiek[ g ] = wiek[ g + 1 ]; wiek[ g + 1 ] = najw; temp[ i ] = najw; } } } for( int i = 0; i < ile; i++ ) wiek[ i ] = temp[ i ]; for( int i = 0; i < ile; i++ ) cout << wiek[ i ] << endl; system( "PAUSE" ); delete[] temp; }
int main() { wczytaj(); zamien(); sortuj(); cout << wiek[(( ile + 1 ) / 2 ) - 1 ] << endl; delete[] wiek; }
Co jest źle w tym kodzie? Przy wpisaniu np 3 1 2 3 Wypisuje losowe liczby. Gdzie jest błąd? |
|
pekfos |
» 2013-04-18 18:09:05 temp po pętli może mieć przypadkowe wartości które potem przypisujesz do tablicy z liczbami. |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2013-04-18 18:18:46 #include <iostream> #include <cstdlib>
using namespace std;
int ile = 1; string wpisane = ""; int * wiek; void wczytaj() { string temp = ""; getline( cin, temp ); ile = atoi( temp.c_str() ); for( int i = 0; i < ile; i++ ) temp[ i ] = 0; wiek = new int[ ile ]; getline( cin, wpisane ); } void zamien() { int j = 0; string temp = ""; for( int i = 0; i < wpisane.length(); i++ ) { if( wpisane[ i ] != ' ' ) { temp = temp + wpisane[ i ]; } if( wpisane[ i ] == ' ' || i == wpisane.length() - 1 ) { wiek[ j ] = atoi( temp.c_str() ); temp = ""; j++; } } } void sortuj() { int * temp = new int[ ile ]; int najw = 0; for( int i = 0; i < ile; i++ ) temp[ i ] = 0; for( int i = 0; i < ile; i++ ) { for( int g = 0; g < ile - 1; g++ ) { if( wiek[ g ] > wiek[ g + 1 ] ) { najw = wiek[ g ]; wiek[ g ] = wiek[ g + 1 ]; wiek[ g + 1 ] = najw; temp[ i ] = najw; } } } for( int i = 0; i < ile; i++ ) wiek[ i ] = temp[ i ]; for( int i = 0; i < ile; i++ ) cout << wiek[ i ] << endl; system( "PAUSE" ); delete[] temp; }
int main() { wczytaj(); zamien(); sortuj(); cout << wiek[(( ile + 1 ) / 2 ) - 1 ] << endl; delete[] wiek; }
teraz są same zera. Siedzę nad tym od wczoraj i nic nie wymyśliłem. :( |
|
pekfos |
» 2013-04-18 18:20:55 Podajesz posortowane dane, więc z tymi zerami nic się dalej nie dzieje ;) |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2013-04-18 18:26:57 Nie rozumiem. Siedzę nad tym już dziś 3,5h i muszę to skończyć przed 20:00 i może nie widzę czegoś oczywistego... |
|
pekfos |
» 2013-04-18 18:29:29 Zamiast zer skopiuj tamtą tablicę. Jeśli reszta jest dobra, to powinno działać. |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2013-04-18 18:37:07 #include <iostream> #include <cstdlib>
using namespace std;
int ile = 1; string wpisane = ""; int * wiek; void wczytaj() { string temp = ""; getline( cin, temp ); ile = atoi( temp.c_str() ); for( int i = 0; i < ile; i++ ) temp[ i ] = 0; wiek = new int[ ile ]; getline( cin, wpisane ); } void zamien() { int j = 0; string temp = ""; for( int i = 0; i < wpisane.length(); i++ ) { if( wpisane[ i ] != ' ' ) { temp = temp + wpisane[ i ]; } if( wpisane[ i ] == ' ' || i == wpisane.length() - 1 ) { wiek[ j ] = atoi( temp.c_str() ); temp = ""; j++; } } } void sortuj() { int * temp = new int[ ile ]; int najw = 0; for( int i = 0; i < ile; i++ ) temp[ i ] = wiek[ i ]; for( int i = 0; i < ile; i++ ) { for( int g = 0; g < ile - 1; g++ ) { if( wiek[ g ] > wiek[ g + 1 ] ) { najw = wiek[ g ]; wiek[ g ] = wiek[ g + 1 ]; wiek[ g + 1 ] = najw; temp[ i ] = najw; } } } for( int i = 0; i < ile; i++ ) wiek[ i ] = temp[ i ]; for( int i = 0; i < ile; i++ ) cout << wiek[ i ] << endl; system( "PAUSE" ); delete[] temp; }
int main() { wczytaj(); zamien(); sortuj(); cout << wiek[(( ile + 1 ) / 2 ) - 1 ] << endl; delete[] wiek; } Nie wiem czemu teraz źle sortuje liczby. :( |
|
pekfos |
» 2013-04-18 18:42:58 Wywal całkiem tablice temp i te 2 pętle w których kopiujesz tablice. |
|
« 1 » 2 |