Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2012, 19:20   #1
gagarin614
 
Регистрация: 04.04.2011
Сообщений: 4
По умолчанию многопоточный сортировщик метод слияние

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

Последний раз редактировалось Stilet; 20.09.2012 в 20:12.
gagarin614 вне форума Ответить с цитированием
Старый 21.09.2012, 09:23   #2
gagarin614
 
Регистрация: 04.04.2011
Сообщений: 4
По умолчанию

#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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c#. Многопоточный сервер tiger Помощь студентам 1 13.09.2012 13:24
ПЕРЕСТАЕТ РАБОТАТЬ СОРТИРОВЩИК Cone Microsoft Office Excel 5 10.08.2010 16:36
Сортировщик медиа-файлов нужен. dim3740 Фриланс 3 30.03.2010 17:29
Требуется сортировщик медиа-файлов (за вознаграждение) dim3740 Помощь студентам 0 28.03.2010 08:36
Многопоточный Ping Квэнди Работа с сетью в Delphi 0 18.12.2006 15:01