C++ (Qt)void Merge(int *A, int first, int last){ // что-то делаем с массивом} void MergeSort(int *A, int first, int last){ MergeSort(A, first, (first+last)/2); //сортировка левой части MergeSort(A, (first+last)/2+1, last); //сортировка правой части Merge(A, first, last); //слияние двух частей} void main(){ ... MergeSort(A, 1, n); ...}
C++ (Qt)int main(){ ... std::thread th1( std::bind( &MergeSort, A, first, (first+last)/2 ) ); std::thread th2( std::bind( &MergeSort, A, (first+last)/2+1, last ) ); th1.join(); th2.join(); Merge( A, first, last );}
C++ (Qt)void sort( int *A, int first, int last, unsigned int numthread ){ assert( A ); assert( first < last ); if( numthread ) { thread th1( bind( &sort, A, first, (first+last)/2, numthread - 1 ) ); thread th2( bind( &sort, A, (first+last)/2+1, last, numthread - 1 ) ); th1.join(); th2.join(); } else { thread th1( bind( &mergeSort, A, first, (first+last)/2 ) ); thread th2( bind( &mergeSort, A, (first+last)/2+1, last ) ); th1.join(); th2.join(); } merge( A, first, last );}