[C] Sortowanie przez scalanie
Ostatnio zmodyfikowano 2017-06-27 01:25
Smegmiarz Temat założony przez niniejszego użytkownika |
[C] Sortowanie przez scalanie » 2017-06-26 23:34:33 Witam, pomógłby ktoś w uruchomieniu tej funkcji scalania ? #include <stdio.h> #include <stdlib.h> #include <time.h>
void sca( int tab[], int l, int s, int p, int n ); void spsca( int tab[], int l, int p );
int main( void ) { int a, b, i, n; printf( "Podaj liczbe elementow tablicy: " ); scanf( "%d", & n ); printf( "Podaj wartosc minimalna: " ); scanf( "%d", & a ); printf( "Podaj wartosc maksymalna: " ); scanf( "%d", & b ); int tab[ n ]; srand( time( NULL ) ); for( i = 0; i <( sizeof( tab ) / sizeof( tab[ 0 ] ) ); i++ ) { tab[ i ] = rand() %( b - a + 1 ) + a; } printf( "Tablica nieposortowana: " ); for( i = 0; i <( sizeof( tab ) / sizeof( tab[ 0 ] ) ); i++ ) { printf( "%d ", tab[ i ] ); } spsca( tab, 0, n - 1 ); printf( "\nTablica posortowana: " ); for( i = 0; i <( sizeof( tab ) / sizeof( tab[ 0 ] ) ); i++ ) { printf( "%d ", tab[ i ] ); } return 0; }
void sca( int tab[], int l, int s, int p, int n ) { int pom[ n ]; int i = l, j = s + 1, k, u; for( u = l; u < p; u++ ) { pom[ u ] = tab[ u ]; } for( k = l; k < p; k++ ) { if( i <= s ) { if( j <= p ) { if( pom[ j ] < pom[ i ] ) tab[ k ] = pom[ j++ ]; else tab[ k ] = pom[ i++ ]; } else tab[ k ] = pom[ i++ ]; } else tab[ k ] = pom[ j++ ]; } }
void spsca( int tab[], int l, int p ) { int n; int sr =( l + p ) / 2; spsca( tab, l, sr ); spsca( tab, sr + 1, p ); sca( tab, l, sr, p, n ); } |
|
maly7 |
» 2017-06-27 01:25:12 Rozmiar tablicy statycznej musi być stały i znany już w momencie kompilacji. Dlatego żeby dało się tak inicjalizować tablicę zmienna n musi być const. Jeśli chcesz pytać o rozmiar tablicy użyj tablicy dynamicznej lub np. vectora. Przy okazji: Jaką wartość ma n? To funkcja rekurencyjna, ale kiedy ma przestać się wywoływać? void spsca( int tab[], int l, int p ) { int n; int sr =( l + p ) / 2; spsca( tab, l, sr ); spsca( tab, sr + 1, p ); sca( tab, l, sr, p, n ); } |
|
« 1 » |