brak dzialania quicksort
Ostatnio zmodyfikowano 2016-07-15 22:43
ares1337 Temat założony przez niniejszego użytkownika |
brak dzialania quicksort » 2016-07-15 21:14:05 Od dłuższego czasu męczę się nad zaimplementowaniem quicksort'u i mimo wielu prób naprawy kodu, nie potrafię znaleźć błędu, który uniemożliwia sortowanie wylosowanych liczb. Byłbym bardzo wdzięczny za pomoc. #include <iostream> #include <time.h> #include <cstdlib>
using namespace std;
void quicksort( int * tab, int left, int right ) { int pivot = tab[( left + right ) / 2 ]; int i = left; int j = right; do { while( tab[ i ] < pivot ) i++; while( tab[ j ] > pivot ) j--; if( i <= j ) { int x = tab[ i ]; tab[ i ] = tab[ j ]; tab[ j ] = x; } } while( i <= j ); if( left < j ) quicksort( tab, left, j ); if( right > i ) quicksort( tab, i, right ); for( int n = 0; n < right - 1; n++ ) { cout << endl << tab[ n ]; } } int main() { int how_many; cout << "How many random numbers you want to sort out: "; cin >> how_many; int * random; random = new int[ how_many ]; srand( time( NULL ) ); for( int i = 0; i < how_many; i++ ) { random[ i ] = rand() % 100 + 1; } quicksort( random, random[ 0 ], random[ how_many - 1 ] ); return 0; }
|
|
carlosmay |
» 2016-07-15 22:43:08 Użyj debuggera do szukania błędu w logice programu. Praca krokowa pozwoli znaleźć błąd. edit: random = new int[ how_many ];
|
A gdzie zwolnienie pamięci. new i delete to nierozłączna para. Są kontenery, które będą tego pilnować za ciebie, np. std::vector<>#include <vector>
int main() { std::vector < int > random; size_t how_many; std::cin >> how_many; for( size_t i = 0; i < how_many; ++i ) { random.push_back( rand() % 100 + 1 ); } for( const int & element: random ) { cout << element << ' '; } }
Popatrz tutaj |
|
« 1 » |