Liniowe liczenie inwersji
Ostatnio zmodyfikowano 2014-01-12 20:36
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ć: #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; }
|
|
Miralem Temat założony przez niniejszego użytkownika |
» 2014-01-12 14:55:56 Jakieś pomysły? |
|
pekfos |
» 2014-01-12 15:02:34 W czym problem? |
|
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? |
|
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? |
|
pekfos |
» 2014-01-12 20:36:40 |
|
« 1 » |