Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
1

Многопоточная сортировка Шелла

29.05.2015, 20:25. Показов 3007. Ответов 19
Метки нет (Все метки)

Задача стоит в том, что надо создать массив чисел, разделить его на две части, в разных потоках отсортировать с помощью сортировки Шелла. Как это можно реализовать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2015, 20:25
Ответы с готовыми решениями:

Многопоточная сортировка Шелла не делится потоки
Здравствуйте! Мне нужно сделать многопоточную сортировку методом Шелла с визуализацией работы...

Многопоточная сортировка
Здравствуйте, форумчане. Решаю задачу обработки данных большого размера 1 гб . Данные нужно ...

Многопоточная сортировка: синхронизация
Добрый день, только начал изучать параллельное программирование и решил написать параллельную...

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком...

19
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 20:32 2
Цитата Сообщение от NAlt Посмотреть сообщение
Как это можно реализовать?
При помощи мозга.
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 20:45  [ТС] 3
castaway, а то я не понимаю
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 20:48 4
NAlt, а зачем тогда спрашиваешь?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 20:52  [ТС] 5
castaway, чтобы мне подсказали код, хотя бы приблизительно
зачем обычно задают вопросы на форумах
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 21:00 6
Цитата Сообщение от NAlt Посмотреть сообщение
чтобы мне подсказали код, хотя бы приблизительно
C++
1
2
3
4
int main()
{
    ... тут код ...
}
Цитата Сообщение от NAlt Посмотреть сообщение
зачем обычно задают вопросы на форумах
Чтобы им помогли, а не делали за них.
0
2546 / 1205 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
29.05.2015, 21:06 7
ThreadFactorial.7z

думаю поможет
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 21:16  [ТС] 8
castaway, я не просила делать за меня, я просила подсказать как можно реализовать
зачем тогда отвечать в теме, если не собираетесь этого делать?

Добавлено через 6 минут
rikimaru2013, спасибо
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 21:19 9
NAlt, я тебе подсказал. Целых четыре строки. Не заметила?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 21:30  [ТС] 10
castaway,если вы считаете, что я ничего не делаю, вы ошибаетесь
вот код который я писала
он работает с ошибкой
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
#include <stdio.h>
#include <windows.h>
HANDLE hThread1;
const int k=30;
int a[k], i, j;
 
DWORD WINAPI Thread2( void* pParams ){
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
return a[i];
Sleep(50);
}
DWORD WINAPI Thread1( void* pParams )
{
int const n=30;
    int a[n],h,t;
    for (h = n; h /= 2;) {
        for (i = h; i < n; i++) {
            t = a[i];
            for (j = i; j >= h && t < a[j - h]; j -= h) {
                a[j] = a[j - h];
            }
            a[j] = t;
        }
    }
    {
HANDLE hThread2=CreateThread(NULL,0,Thread2,NULL,0,NULL);WaitForSingleObject(hThread2,INFINITE);
CloseHandle(hThread2);
    }
    return 0;
}
int main()
{
    system("color F0");
 
for (i=0; i<k; i++) {a[i]=rand()%100; printf("%d ", a[i]); }; printf("\n");
    hThread1=CreateThread(NULL,0,Thread1,NULL,0,NULL);
WaitForSingleObject(hThread1,INFINITE);
for (i=0; i<k; i++) printf("%d ", a[i]);
printf("\n");
system("pause");
return 0;
}
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 21:39 11
NAlt, что мешало сразу его предоставить?
С какой ошибкой он работает?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 21:44  [ТС] 12
castaway, мешало то, что я только изучаю потоки, и я не уверена в том, что могла правильно что-либо сделать и мне нужен пример как это сделать, + тут нет разделения массива на две части, чтобы два потока сортировало, а потом сливалось вместе и выдавало результат
после сортировки выдает 30 в конце, хотя не должен этого делать
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 22:02 13
Цитата Сообщение от NAlt Посмотреть сообщение
после сортировки выдает 30 в конце, хотя не должен этого делать
Выдаёт одну цифру 30?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 22:04  [ТС] 14
castaway, выдает все цифры, но в конце 30
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 22:08 15
Цитата Сообщение от NAlt Посмотреть сообщение
но в конце 30
Я наверное что-то не понимаю.. А что должно быть заместо тридцати?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 22:11  [ТС] 16
castaway, ну как бы у вас есть числа
41, 67, 34, 0, 69, 24
результат
0, 24, 41, 67, 69, 30

запустила программу снова, перестало даже так сортировать
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 22:23 17
Ну хорошо. Если ты сможешь написать хотя бы рабочую сортировку Шелла (без потоков), тогда я постараюсь тебе помочь.
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 22:44  [ТС] 18
castaway,

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
#include <stdio.h>
#include <iostream>
using namespace std;
void shell_sort (int *a, int n) {
    int h, i, j, t;
    for (h = n; h /= 2;) {
        for (i = h; i < n; i++) {
            t = a[i];
            for (j = i; j >= h && t < a[j - h]; j -= h) {
                a[j] = a[j - h];
            }
            a[j] = t;
        }
    }
}
 
int main (int ac, char **av) {
 
    int i;
    int a[10];
    for (i=0; i<10; i++) //ввод массива
    {
        cout<<i+1<<" Element "; cin>>a[i];
    }
    int n = sizeof a / sizeof a[0];
 
    for (i = 0; i < n; i++)
 
        printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
    shell_sort(a, n);
    for (i = 0; i < n; i++)
        printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
    return 0;
}
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
29.05.2015, 23:34 19
Можно так. Через OpenMP.
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
void InsertionSort( int * A, int N )
{
  int i, j, v;
  for (i = 1; i < N; i++) {
    v = A[i]; 
    j = i;
    while (A[j-1] > v) {
      A[j] = A[j-1]; 
      j--;
      if (j <= 0) break;
    }
    A[j] = v;
  }
}
 
void parallel_shellsort( int * A, int N )
{
  int k, h;
  h = 1; while (h < N) h = 3*h + 1;
  h /= 3;
#pragma omp parallel firstprivate(h)
 {
  while (h != 1) {
#pragma omp for
    for (k = 0; k < h; k++) {
      int i, j, v;
      for (i = k; i < N; i+=h) {
        v = A[i]; j = i;
        while (A[j-h] > v) {
            A[j] = A[j-h];
            j = j - h;
          if (j <= h) break;
        }
        A[j] = v;
      }
    }  // for k
    h /= 3;
  } //  end while 
 }  // end parallel region
    InsertionSort( A, N );
}
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
29.05.2015, 23:38  [ТС] 20
castaway, спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2015, 23:38

Сортировка Шелла и пирамидальная сортировка для символов
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки...

Многопоточная быстрая сортировка (уменьшить время работы)
#include &quot;pch.h&quot; #include &lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;ctime&gt; #include&lt;vector&gt;...

Сортировка Шелла и сортировка вставками
Напишите программу для: 1)Сортировка вставкой 2)сортировка Шелла

Пирамидальная сортировка и сортировка Шелла
Ребята помогите пожалуйста, я NEWBIE и не могу решить такая задача : Выполнить сортировку по...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru