Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 203
#1

Сортировка слиянием с потоками - C++

18.12.2012, 19:56. Просмотров 421. Ответов 0
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <process.h>
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <values.h>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
struct ThreadArgs {
    int l,r,k;
    explicit ThreadArgs(int l_ = 0, int r_ = 0, int k_ = 0): l(l_), r(r_), k(k_) {}
};
 
int *a,m[100],e;
 
int sort(int l, int r){
    if (r-l<=1){
        if (a[r]<a[l]) { e=a[r]; a[r]=a[l]; a[l]=e; }
        return 0;
    }
 
    int i,t1=l, t2=(r+l)/2+1;
 
    sort(t1, t2-1);
    sort(t2 ,r);
 
    int *b = new int [r-l+2];
    for (i=0; i<=r-l; i++){
        if (a[t1]<a[t2]){
            (b[i])=a[t1];
            t1++;
            if (t1==(r+l)/2+1) for (i=i+1; i<=r-l; i++, t2++) (b[i])=a[t2];
        } else {
            (b[i])=a[t2];
            t2++;
            if (t2==r+1) for (i=i+1; i<=r-l; i++, t1++) (b[i])=a[t1];
        }
    }
    for (i=l; i<=r; i++) a[i]=b[i-l];
    delete []b;
    return 0;
}
 
void start(void* arg){
     const ThreadArgs *ta = static_cast<const ThreadArgs*>(arg);
     sort(ta->l, ta->r);
}
 
int main(){
    HANDLE hand[2];
    system("cls");
    srand( time(NULL) );
    clock_t time;
    time=clock();
    int i;
    a=m;
    for (i=0; i<100; i++){
        a[i]=rand();
    }
 
    ThreadArgs p1(0,49,1);  
    hand[0]=(HANDLE)_beginthread(start, 0, &p1);
    
    ThreadArgs p2(50,99,2);     
    hand[1]=(HANDLE)_beginthread(start, 0, &p2);
 
    WaitForMultipleObjects(2, hand, true, INFINITE);
 
//    sort1(0,49);
//    sort2(50,99);
 
    int *b = new int [101], t1=0, t2=50; 
    for (i=0; i<=99; i++){
        if (a[t1]<a[t2]){
            (b[i])=a[t1];
            t1++;
            if (t1==50) for (i=i+1; i<=99; i++, t2++) (b[i])=a[t2];
        } else {
            (b[i])=a[t2];
            t2++;
            if (t2==100) for (i=i+1; i<=99; i++, t1++) (b[i])=a[t1];
        }
    }
    
    for (i=0; i<=99; i++) printf("%d ",b[i]);
 
    delete []b;
 
 
    printf("\n");
    time=clock()-time;
    printf("%f", (double)time/CLOCKS_PER_SEC);
 
    system("pause");
    return 0;
}
Опять же нужны комменты.
P.S. заранее спасибо, кто поможет.

Добавлено через 22 часа 53 минуты
Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 19:56     Сортировка слиянием с потоками
Посмотрите здесь:

Сортировка слиянием - C++
Здравствуйте, изучая сортировку, в интернете наткнулся на код сортировки слиянием. int a; void merge(int,int,int); void...

Сортировка с слиянием - C++
Добрый вечер! Помогите с подсчетом перестановок и сравнений при сортировке с слиянием. Вот нашел код, и ищу легкий способ чтоб посчитать,...

Сортировка слиянием С++ объясните - C++
Помогите, пожалуйте, мне нужно объяснить эту программу примитивным языком, нужно для защиты курсовой работы #include&lt;stdio.h&gt; ...

Сортировка слиянием вылетает - C++
Добрый вечер. Попробовал написать сортировку слиянием, а виндовс прекращает работу программы. Пишу в билдере, он ошибок не выдаёт, всё...

Сортировка ест. слиянием - C++
Задача : Отсортировать текстовый файл, содержащий вещественные числа, в порядке убывания методом естественного слияния.

Сортировка двупутевым слиянием - C++
Помогите исправить функцию сортировки двухпутевого слияния... Функция корректно работает и выдает результат только лишь если она работает...

Сортировка естественным слиянием - C++
Не могу понять в чем ошибка и как до реализовать саму сортировку если возможно объясните где ошибка и помогите доделать код. Задача...

Сортировка, реализованная потоками... - C++
Суть: Нужно написать программу, которая сортирует массив чисел( сам массив вводим вручную или генерируем рэндомно) , но это должно быть...

Сортировка слиянием и Access Violation - C++
Доброе время суток. Подскажите в чем я мог просчитаться(строчку с ошибкой отметил комментарием): #include &quot;stdafx.h&quot; #include...

Неправильно работает сортировка слиянием - C++
Всем привет!!! Пытаюсь реализовать алгоритм по книге , там псевдокод, я попытался перенести всё на С++, вроде бы всё делаю правильно, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru