Problem z łączeniem tabel
Ostatnio zmodyfikowano 2012-11-10 20:35
korpus2 Temat założony przez niniejszego użytkownika |
Problem z łączeniem tabel » 2012-11-10 20:10:42 Mam do napisania algorytm, który dzieli dużą tablice, rozbija ją na dwie małe a następnie każdą z nich sortuje bąbelkowo w osobnych wątkach. Mam problem z połączeniem tablic tablic w procedurze parallel_bubble_sort. Oto mój kod: typedef struct { int rozmiar; int * tab; } tablica;
void __cdecl p_bubble( tablica * t ) { int i; int j; int tmp; for( i = 0; i < t->rozmiar; i++ ) { for( j = 0; j < t->rozmiar - 1; j++ ) { if( t->tab[ j ] > t->tab[ j + 1 ] ) { tmp = t->tab[ j + 1 ]; t->tab[ j + 1 ] = t->tab[ j ]; t->tab[ j ] = tmp; } } } Sleep( 0 ); _endthread(); return; }
void parallel_bubble_sort( int * t, int rozmiar ) { int rozmiar1; int rozmiar2; tablica sort1; tablica sort2; rozmiar1 = rozmiar / 2; rozmiar2 = rozmiar - rozmiar1; sort1.rozmiar = rozmiar1; sort2.rozmiar = rozmiar2; sort1.tab =( int * ) malloc( sort1.rozmiar * sizeof( int * ) ); sort2.tab =( int * ) malloc( sort2.rozmiar * sizeof( int * ) ); for( int i = 0; i < rozmiar1; i++ ) { sort1.tab[ i ] = t[ i ]; } if( rozmiar % 2 == 0 ) { for( int i = 0; i < rozmiar2; i++ ) { sort2.tab[ i ] = t[ rozmiar2 + i ]; } } else { for( int i = 0; i < rozmiar2; i++ ) { sort2.tab[ i ] = t[ rozmiar2 + i - 1 ]; } } HANDLE thread1 =( HANDLE ) _beginthread(( void( * )( void * ) ) p_bubble, NULL,( void * ) & sort1 ); HANDLE thread2 =( HANDLE ) _beginthread(( void( * )( void * ) ) p_bubble, NULL,( void * ) & sort2 ); WaitForSingleObject( thread1, INFINITE ); WaitForSingleObject( thread2, INFINITE ); int i = 0; int j = 0; int k = 0; do { if( sort1.tab[ i ] <= sort2.tab[ j ] ) { t[ k ] = sort1.tab[ i ]; i++; } else { t[ k ] = sort2.tab[ j ]; j++; } k++; } while(( i != sort1.rozmiar ) ||( j != sort2.rozmiar ) ); } nie dokończyłem jeszcze tej procedury, ale jak na razie się nie da nawet porównać elementów. Co z tym fantem zrobić? Pozdrawiam, Krzysiek |
|
DejaVu |
» 2012-11-10 20:17:51 |
|
korpus2 Temat założony przez niniejszego użytkownika |
» 2012-11-10 20:29:13 dzięki bardzo, działa. Tylko dlaczego mój sposób nie działał i jak to można zrobić na piechotę, bez używania funkcji bibliotecznej? |
|
DejaVu |
» 2012-11-10 20:35:01 |
|
« 1 » |