Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 20.09.2012, 20:16   #1 (permalink)
Gagarin614
Member
 
Регистрация: 17.10.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Многопоточный сортировщик методом слияния

Ребят помогите переделать данный код в многопотоковый. Запускаю в терминале 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
Gagarin614 вне форума   Ответить с цитированием

Старый 20.09.2012, 20:16
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Так же множество полезной для вас информации вы сможете найти по этим ссылкам

Вычислить методом тарапеции в VBA
Pascal, Delphi. Шифрование методом Льюиса
Ладонник2 - клавиатура с новым методом ввода
Паскаль. Найти корни уравнения методом хорд
Сделайте, пожалуйста, сортировку пузырьковым методом по возрастанию
Определение плана продаж игровым методом

Старый 21.09.2012, 00:45   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

это что? python?
kreol вне форума   Ответить с цитированием
Старый 21.09.2012, 10:16   #3 (permalink)
Gagarin614
Member
 
Регистрация: 17.10.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я в этом плохо разбираюсь, пишу в консоли Ubuntu, походу да
Gagarin614 вне форума   Ответить с цитированием
Старый 21.09.2012, 10:22   #4 (permalink)
Gagarin614
Member
 
Регистрация: 17.10.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

#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;
}
Вычитал из кучи книженцев и получилось это. Я вляется ли многопотоковым данный код?
Gagarin614 вне форума   Ответить с цитированием
Старый 21.09.2012, 16:29   #5 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

1) оформляйте код в соответсвующие теги [CODE*][/CODE*]
(звездочки убрать)
2) с потоками я не работал и с++ не особо знаю но как мне кажется ваш код не многопоточный

попробуйте смотреть в сторону OpenMP или pthread_create
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:36.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.