Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Sortowanie przez scalanie

Ostatnio zmodyfikowano 2017-06-27 01:25
Autor Wiadomość
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 ?
C/C++
#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 ) // funkcja glowna
{
    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 ]; // wypelnienie tablicy
    srand( time( NULL ) );
    for( i = 0; i <( sizeof( tab ) / sizeof( tab[ 0 ] ) ); i++ )
    {
        tab[ i ] = rand() %( b - a + 1 ) + a;
    }
   
    printf( "Tablica nieposortowana: " ); // wypisanie nieposortowanej
    for( i = 0; i <( sizeof( tab ) / sizeof( tab[ 0 ] ) ); i++ )
    {
        printf( "%d  ", tab[ i ] );
    }
   
    spsca( tab, 0, n - 1 ); // wywolanie
   
    printf( "\nTablica posortowana: " ); // wypisanie posortowanej
    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 ) // sortowanie prez scalanie
{
   
    int pom[ n ]; //w tym miejscu jest pom[n] przez co w funkcjach musiałem wszędzie dać 'int n' i może to jest błąd ale próbowałem wszystkiego
    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 );
}
P-162854
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ć?
C/C++
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 );
}
P-162856
« 1 »
  Strona 1 z 1