20.09.2012, 20:16 | #1 (permalink) |
Member
Регистрация: 17.10.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Многопоточный сортировщик методом слияния
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 |
20.09.2012, 20:16 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Так же множество полезной для вас информации вы сможете найти по этим ссылкам Вычислить методом тарапеции в VBA Pascal, Delphi. Шифрование методом Льюиса Ладонник2 - клавиатура с новым методом ввода Паскаль. Найти корни уравнения методом хорд Сделайте, пожалуйста, сортировку пузырьковым методом по возрастанию Определение плана продаж игровым методом |
21.09.2012, 10:22 | #4 (permalink) |
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; } Вычитал из кучи книженцев и получилось это. Я вляется ли многопотоковым данный код? |
21.09.2012, 16:29 | #5 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
1) оформляйте код в соответсвующие теги [CODE*][/CODE*]
(звездочки убрать) 2) с потоками я не работал и с++ не особо знаю но как мне кажется ваш код не многопоточный попробуйте смотреть в сторону OpenMP или pthread_create |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|