[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Компьютеры » Программирование » C++, C# » Сортировка Шелла
Сортировка Шелла
Adidas24Дата: Среда, 17.10.2018, 00:11 | Сообщение # 1
НовичЁк
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Оффлайн
Посоветуйте пожалуйста , как быть? У меня как-то не так оно параллелится, что не так в этой проге?
Код
/*Параллельная сортировка Шелла*/
#include "stdafx.h"  
#include <iostream> 
#include <omp.h> 
#include <ctime>
#include <windows.h> 
using namespace std;
int main()
{    
setlocale(LC_ALL, "rus");   
int m;    
const int n = 199;   
int a[n];    
srand(time(NULL));    
cout << "\nИсходный массив: ";    
for (int i = 0; i < n; i++)    
{        
a = rand()%n;   
}    
for (int i = 0; i < n; i++)    
{
       cout << a << " ";    
}    
cout << "\n";    
cout << endl;    
cout << "Этапы сортировки массива: \n";   
cout << "\n";   
 //алгоритм сортировки Шелла    
int step = n / 2; //инициализируем шаг    
while (step > 0) //пока шаг не 0     
{    
#pragma omp parallel for num_threads(2)      
for (int i = 0; i < (n - step); i++)    
{        
int j = i;        //будем идти начиная с i-го элемента         
while (j >= 0 && a [j]> a[j + step])        
 {           
 Sleep(1);            
#pragma omp critical[/j] {
   int temp = a;                    
a = a[j + step];                   
 a[j + step] = temp;                   
 m = omp_get_thread_num();                   
  cout << "Поток " << m << " меняет местами элементы с номерами " << j << " и " << j + step << "\n";                   
 j--;                
}        
}  
}            
step = step / 2;//уменьшаем шаг  }   
 cout << "\nОтсортированный массив: ";    
for (int i = 0; i < n; i++)   
 {        
cout << a [i]<< " ";[/i]    
}    
cout << "\n";    
system("pause");   
 return 0;}

 
shutov-semenДата: Среда, 17.10.2018, 21:17 | Сообщение # 2
НовичЁк
Группа: Проверенные
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Оффлайн

Код
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <Windows.h>
#include <ctime>
#include <iomanip>
using namespace std;
int shell(int *mass,int n)
{
    int i, j, step;
    int tmp;
    for (step = n/2; step > 0; step /= 2)
        for (i = step; i < n; i++)
        {
         tmp = mass[i];
            for (j = i; j >= step; j -= step)
            {
                if (tmp < mass[j - step])
                    mass [j]= mass[j - step];
            else
                   break;
         }
            mass = tmp;
      }
            return tmp;
}
int main() 

setlocale(LC_ALL, "Russian"); 
const int n = 10; // Количество элементов массива
int mas[n]; 
srand(time(NULL));
cout <<"Исходный массив: " << endl;
for (int i = 0; i < n; i++)
{
    mas = rand() % n;   // заполняем массив случайными числами
}
for (int i = 0; i < n; i++)
{
    cout  << mas << " ";   // выводим массив на экран
}
cout << endl;
shell(mas, n);   // вызываем функцию Быстрой сортировки
cout << "Отсортированный массив: " << endl;
for (int i = 0; i < n; i++)
{
cout << mas << " ";   // Вывод на экран отсортированного массива
}
cout << endl;
system("pause");
return 0;
}[/j][/i]


или помогите распараллелить этот алгоритм(все таки этот алгоритм правильнее)
 
Форум » Компьютеры » Программирование » C++, C# » Сортировка Шелла
  • Страница 1 из 1
  • 1
Поиск: