• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Многопоточный сортировщик методом слияния

Gagarin614

Новые
Регистрация
17 Окт 2010
Сообщения
43
Реакции
0
Баллы
0
Многопоточный сортировщик методом слияния

Ребят помогите переделать данный код в многопотоковый. Запускаю в терминале Ubuntu, все четко выводит, теперь надо многопотоковым. Или дайте ссылку про "многопоточный сортировщик метод слияние"

A = [9, 7, 5, 2, 1, 3, 8]
def merge_sort(A):
if len(A) <= 1:
return A
middle = int(len(A) / 2)
left = merge_sort(A[:middle])
right = merge_sort(A[middle:])
return merge(left, right)
def merge(left, right):
result = []
while len(left) > 0 and len(right) > 0:
if left[0] <= right[0]:
result.append(left[0])
left = left[1:]
else:
result.append(right[0])
right = right[1:]
if len(left) > 0:
result +=left
if len(right) > 0:
result +=right
return result
print A
B = merge_sort(A)
print B
 
это что? python?
 
Я в этом плохо разбираюсь, пишу в консоли Ubuntu, походу да
 
#include<stdio.h>
#include<stdlib.h>

#define n 20

int merge(int *, int , int , int);
int mergeSort (int *, int , int);

int main() {
int *a;
int i;
a = ( int* ) malloc ( n*sizeof(int) );
for ( i = 0; i < n; i++ )
{
*(a+i)=rand()%100;
printf( "%i ", *(a+i) );
}
printf("\n");
printf( "\nAfter sorting\n" );
printf("\n");
*a=mergeSort(a, 0, n-1);

for ( i = 0; i < n; i++ )
{
printf( "%i ", *(a+i) );
}
free(a);
return 0;
}
int merge (int *arr, int a, int split, int b)
{
int pos1 = a;
int pos2 = split + 1;
int pos3 = 0;
int *temp;
temp = (int*) malloc ( ( b-a+1 ) *sizeof(int) );

while (pos1 <= split && pos2 <= b)
{
if ( *(arr + pos1) < *(arr + pos2) )
{
*( temp+pos3 ) = *( arr+pos1 );
pos3++;
pos1++;
}
else
{
*( temp+pos3 ) = *( arr+pos2 );
pos3++;
pos2++;
}
}
while ( pos2 <= b )
{
*( temp+pos3 ) = *( arr+pos2 );
pos3++;
pos2++;
}
while ( pos1 <= split )
{
*( temp+pos3 ) = *( arr+pos1 );
pos3++;
pos1++;
}

for ( pos3 = 0; pos3 < b-a+1; pos3++ ) *( arr + a + pos3) = *( temp + pos3 );
free(temp);
return *arr;
}//////////////////////////////////////////// merge
int mergeSort(int *arr, int a, int b)
{
int split;
if (a < b)
{
split = (a + b)/2;
mergeSort (arr, a, split);
mergeSort (arr, split+1, b);
merge (arr, a, split, b);
}
return *arr;
}
Вычитал из кучи книженцев и получилось это. Я вляется ли многопотоковым данный код?
 
1) оформляйте код в соответсвующие теги [CODE*][/CODE*]
(звездочки убрать)
2) с потоками я не работал и с++ не особо знаю но как мне кажется ваш код не многопоточный

попробуйте смотреть в сторону OpenMP или pthread_create
 
Назад
Сверху