Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
kugen
-18 / 2 / 1
Регистрация: 06.03.2012
Сообщений: 47
1

Параллельная сортировка Бэтчера. Алгоритм М

14.06.2015, 13:30. Просмотров 555. Ответов 1
Метки нет (Все метки)

Запрограммировал метод Шелла алгоритм D. До сих пор не могу понять как делается эта сортировка бэтчера, как говориться гляжу в книгу, вижу фигу
Delphi
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  i,j,n,s,x,z,temp,min,k: integer;
  a: array [1..10] of integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9',#8]) then key:=#0;
end;
 
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
   key:=#0;
end;
 
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
     key:=#0;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 if  (edit1.text='')
   then ShowMessage('Г—ГІГ® ГўГўГҐГ« ГІГ®?!')
   else n:=strtoint (edit1.text);
        randomize;
        edit2.text:='';
 for i:=1 to n do
     begin
      a[i]:=random(30)-10;
      edit2.Text:=edit2.Text+'  '+inttostr(a[i]);
     end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin   if (edit1.text='') or (edit2.text='')
   then ShowMessage('Г—ГІГ® ГўГўГҐГ« ГІГ®?!')
   else
       begin
       edit3.Text:='';
       s:=round((n+2)/3);
       repeat
       begin
       for i:=1 to n-s do
       for i:=1 to n-s do
         if a[i]<a[i+s]
         then
           begin
           x:=a[i];
           a[i]:=a[i+s];
           a[i+s]:=x;
           end;
         end;
 
       if n<200 then s:=s-1
                else
                 if s>5 then s:=(s-1) div 2
                        else
                          if s=1 then s:=0
                                 else s:=1
         Until s=0;
         end;
 
for i:=1 to n do
edit3.Text:=edit3.Text+'  '+inttostr(a[i]);
end;
 
 
 
procedure TForm1.Button5Click(Sender: TObject);
begin   if (edit1.text='') or (edit2.text='')
   then ShowMessage('ГЋГЇГїГІГј!')
   else
       begin
       edit3.Text:='';
       s:=round((n+2)/3);
       repeat
       begin
       for i:=1 to n-s do
       for i:=1 to n-s do
         if a[i]>a[i+s]
         then
           begin
           x:=a[i];
           a[i]:=a[i+s];
           a[i+s]:=x;
           end;
         end;
 
       if n<200 then s:=s-1
                else
                 if s>5 then s:=(s-1) div 2
                        else
                          if s=1 then s:=0
                                 else s:=1
         Until s=0;
         end;
 
for i:=1 to n do
edit3.Text:=edit3.Text+'  '+inttostr(a[i]);
end;
end.
Сам код Шелла
0
Вложения
Тип файла: rar Новая папка.rar (174.2 Кб, 5 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2015, 13:30
Ответы с готовыми решениями:

Параллельная сортировка ListBox
В ListBox1 у меня вопросы, в ListBox2 ответы. Все построчно упорядочено, в 3...

Быстрая сортировка. Алгоритм Q. Интерполяционный поиск
Всем доброго времени суток. У меня сложилась такая ситуация: поступил я на...

Разработать алгоритм и программу, сортировка по алфавиту
На форме1 расположенны три текстовых поля, в которых вводятся Фамилия студента,...

Параллельная работа нескольких циклов
Привет всем! Очень нужна помощь! Разъясните, пожалуйста, каким образом можно...

Параллельная сортировка Бэтчера
Доброго времени суток всем. есть код: #include &lt;stdio.h&gt; #include...

1
kugen
-18 / 2 / 1
Регистрация: 06.03.2012
Сообщений: 47
14.06.2015, 23:32  [ТС] 2
Во вложении сортировка шелла

Добавлено через 6 часов 29 минут
помогите а

Добавлено через 3 часа 32 минуты
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    btn1: TButton;
    edt1: TEdit;
    edt2: TEdit;
    btn2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
const n=16;
var
  Form1: TForm1;
  a: array[1..n] of integer;
  p,q,r,d,t:integer;
 
implementation
 
{$R *.dfm}
 
function Log(x, b: Real): Real;
 begin
   Result:=ln(x)/ln(b);
 end;
 
procedure TForm1.Button1Click(Sender: TObject);
var i,buf:integer;
begin
If log(n,2)>trunc(log(n,2)) then t:=trunc(log(n,2))+1 else t:=trunc(log(n,2));
p:=trunc(exp(ln(2)*(t-1))); //p=2^(t-1)
randomize;
 
repeat
  // Задание значений вспомогательных переменных
  q := trunc( exp( ln( 2 ) * ( t - 1 )));
  r := 0;
  d := p;
  repeat
    // Цикл сравнения и обмена
    for i := 0 to n - d - 1 do
    begin
      if ( A[ i + 1 ] > A[ i + d + 1 ] ) then
      begin
        buf := A[ i + 1 ];
        A[ i + 1 ] := A[ i + d + 1 ];
        A[ i + d + 1 ] := buf;
      end;
    end;
    d := q - p;
    q := q div 2;
    r := p;
  until ( d = 0 );
  p := p div 2;
until ( p = 0 );
 
//Вывод отсортированного массива
edt2.Text:='';
For i:=1 to n do
edt2.Text:=edt2.Text+'  '+inttostr(a[i])
end;
 
procedure TForm1.btn1Click(Sender: TObject);
var i:Integer;
begin
  edt1.Text:='';
//Заполнение массива
For i:=1 to n do
  begin
  a[i]:=random(100);
  edt1.Text:=edt1.Text+'  '+inttostr(a[i])
  end;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
begin
edt1.Text:='';
edt2.Text:='';
end;
 
end.
пригодиться может кому
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2015, 23:32

Параллельная сортировка Бэтчера
Совершенно нигде не могу найти внятного разъяснения что это за сортировка и как...

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

сортировка Бэтчера
Очень нужна реализация алгоритма... Помогите пожалуйста


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

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

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