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

Liniowe liczenie inwersji

Ostatnio zmodyfikowano 2014-01-12 20:36
Autor Wiadomość
Miralem
Temat założony przez niniejszego użytkownika
Liniowe liczenie inwersji
» 2014-01-12 00:50:07
Program na sortowanie tablicy i wypisywanie ilości inwersji. Na wejściu liczba zestawów danych, każdy zestaw to ilość liczb i te liczby. Należy je posortować i wyliczyć ilość inwersji w czasie liniowym. Do tego chyba konieczne jest sortowanie przez scalanie i użyłem go. O ile sortuje dobrze, to z wyszukiwaniem przy pomocy tego algorytmu sortowania inwersji sobie nie mogę poradzić:

C/C++
#include <iostream>

void merge( int A[], int W, int pocz, int sr, int kon ) {
    int i, j, q, B[ W ];
    for( i = pocz; i <= kon; i++ )
         B[ i ] = A[ i ];
   
    i = pocz;
    j = sr + 1;
    q = pocz;
    while( i <= sr && j <= kon ) {
        if( B[ i ] < B[ j ] )
             A[ q++ ] = B[ i++ ];
        else
             A[ q++ ] = B[ j++ ];
       
    }
    while( i <= sr )
         A[ q++ ] = B[ i++ ];
   
}

void mergesort( int A[], int W, int pocz, int kon ) {
    int sr;
    if( pocz < kon ) {
        sr =( pocz + kon ) / 2;
        mergesort( A, W, pocz, sr );
        mergesort( A, W, sr + 1, kon );
        merge( A, W, pocz, sr, kon );
    }
}

int main() {
    int n1, n2, t[ 100 ];
    std::cin >> n1;
    while( n1-- ) {
        std::cin >> n2;
        for( int i = 0; i < n2; i++ ) {
            std::cin >> t[ i ];
        }
        mergesort( t, n2, 0, n2 - 1 );
        for( int i = 0; i < n2; i++ ) {
            std::cout << t[ i ] << std::endl;
        }
    }
    return 0;
}
P-101900
Miralem
Temat założony przez niniejszego użytkownika
» 2014-01-12 14:55:56
Jakieś pomysły?
P-101949
pekfos
» 2014-01-12 15:02:34
W czym problem?
P-101953
Miralem
Temat założony przez niniejszego użytkownika
» 2014-01-12 15:13:09
Jak mogę przy pomocy mergesorta wyliczać wszystko możliwe inwersje danej tablicy?
P-101958
Miralem
Temat założony przez niniejszego użytkownika
» 2014-01-12 20:31:31
Czy mogę jakoś to zliczanie inwersji wrzucić do mergesorta czy muszę napisać nową funkcję odwołująca się do niego?
P-102014
pekfos
» 2014-01-12 20:36:40
P-102015
« 1 »
  Strona 1 z 1