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


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

Ребят помогите откоментить ход решения задачи


int a[] = {10, 8, 5, 2, 3, 6, 7, 1, 4, 9};

typedef struct node {
int i;
int j;
} NODE;

void merge(int i, int j)
{
int mid = (i+j)/2;
int ai = i;
int bi = mid+1;

int newa[j-i+1], newai = 0;

while(ai <= mid && bi <= j) {
if (a[ai] > a[bi])
newa[newai++] = a[bi++];
else
newa[newai++] = a[ai++];
}

while(ai <= mid) {
newa[newai++] = a[ai++];
}

while(bi <= j) {
newa[newai++] = a[bi++];
}

for (ai = 0; ai < (j-i+1) ; ai++)
a[i+ai] = newa[ai];

}

void * mergesort(void *a)
{
NODE *p = (NODE *)a;
NODE n1, n2;
int mid = (p->i+p->j)/2;
pthread_t tid1, tid2;
int ret;

n1.i = p->i;
n1.j = mid;

n2.i = mid+1;
n2.j = p->j;

if (p->i >= p->j) return;

ret = pthread_create(&tid1, NULL, mergesort, &n1);
if (ret) {
printf("%d %s - unable to create thread - ret - %d\n", __LINE__, __FUNCTION__, ret);
exit(1);
}


ret = pthread_create(&tid2, NULL, mergesort, &n2);
if (ret) {
printf("%d %s - unable to create thread - ret - %d\n", __LINE__, __FUNCTION__, ret);
exit(1);
}

pthread_join(tid1, NULL);
pthread_join(tid2, NULL);

merge(p->i, p->j);
pthread_exit(NULL);
}


int main()
{
int i;
NODE m;
m.i = 0;
m.j = 9;
pthread_t tid;

int ret;

ret=pthread_create(&tid, NULL, mergesort, &m);
if (ret) {
printf("%d %s - unable to create thread - ret - %d\n", __LINE__, __FUNCTION__, ret);
exit(1);
}

pthread_join(tid, NULL);

for (i = 0; i < 10; i++)
printf ("%d ", a[i]);

printf ("\n");

// pthread_exit(NULL);
return 0;
Gagarin614 вне форума   Ответить с цитированием

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

Можете ознакомится, тут наверняка есть дельные советы

Сортировка в одномерном массиве
Сортировка в Vista
Сортировка по алфавиту
Сортировка по алфавиту(помогите)

Ads

Яндекс

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

Опции темы
Опции просмотра

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

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




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

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