Merge sort C++
Ostatnio zmodyfikowano 2020-03-09 16:40
TheFandorn Temat założony przez niniejszego użytkownika |
Merge sort C++ » 2020-03-07 21:31:31 Cześć, mam za zadanie napisać program, który posortuję dwa rosnące ciągi przez scalanie. Posortuje je dopóki pierwszy ciąg nie dobiegnie końca, a następnie dopisze pozostałe wyrazy drugiego ciągu. Niestety z tego co widzę drugi człon funkcji (po pierwszym do - while'u) nie działa poprawnie, bo końcówka sortowania nie dopisuje się (wstawia zazwyczaj losowe liczby) i za Boga nie mogę rozgryźć czemu. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
void scal( int tab[], int p, int g, int k ) { int i = p; int j = g; int n = 0; int pom[ 23 ]; do { if( tab[ i ] <= tab[ j ] ) { pom[ n ] = tab[ i ]; i++; n++; } else { pom[ n ] = tab[ j ]; j++; n++; } } while( i < g || j <= k ); if( i == g && j < k ) { do { pom[ n ] = tab[ j ]; j++; n++; } while( j <= k ); } else if( j == k && i < g ) { do { pom[ n ] = tab[ i ]; i++; n++; } while( i <= g ); } for( int a = 0; a < 23; a++ ) { tab[ a ] = pom[ a ]; } }
int main() { srand( time( 0 ) ); int tab[ 23 ]; int p, g, k; tab[ 0 ] = rand() % 10; for( int i = 1; i <= 11; i++ ) { tab[ i ] = tab[ i - 1 ] +( rand() % 10 ) + 1; } tab[ 12 ] = rand() % 10; for( int i = 13; i <= 22; i++ ) { tab[ i ] = tab[ i - 1 ] +( rand() % 10 ) + 1; } g = 12; p = 0; k = 22; scal( tab, p, g, k ); for( int i = 0; i <= 22; i++ ) { cout << tab[ i ] << " "; } cout << endl; }
Pomoże ktoś? Dzięki |
|
pekfos |
» 2020-03-08 18:11:19 } while( i < g || j <= k );
|
Na pewno alternatywa między tymi warunkami? |
|
TheFandorn Temat założony przez niniejszego użytkownika |
» 2020-03-09 16:40:37 Dzięki, działa! Złe rozumowanie miałem. && i drobna modyfikacja IFów naprawiła sprawę |
|
« 1 » |