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

Каскадное слияние со специальным распределением - C++

Восстановить пароль Регистрация
 
Jack33
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 11
09.07.2012, 23:49     Каскадное слияние со специальным распределением #1
Здравствуйте, я хочу реализовать на C++ алгоритм каскадного слияния со специальным распределением. Прочитал материал из Кнута об этом алгоритме и не могу вникнуть, как написать программу на C++, которая работала бы с ним. Что она должна в целом делать?

Добавлено через 1 час 47 минут
Нашел код на Delphi (с таймерами процедур, они не нужны), кто-нибудь может преобразовать его в C++?

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
var
  Form1: TForm1; p,q,s,d:integer;
  const n =10000000;
  var
 A:array[1..n]of integer;
 L:array[1..n]of integer;
 W:integer;
 Raz:integer;
 d1, d2, d3, d4:TDateTime;
implementation
{$R *.dfm}
  Procedure Sort(p,q : integer); {p,q — индексы начала и конца сортируемой части массива}
Var i,j,r,T : integer;
Begin
 if p<q then {массив из одного элемента тривиально упорядочен}
 begin
  r:=A[p];
  i:=p-1;
  j:=q+1;
  while i<j do
   begin
    repeat
     i:=i+1;
    until A[i]>=r;
    repeat
     j:=j-1;
    until A[j]<=r;
    if i<j then
     begin
      T:=A[i];
      A[i]:=A[j];
      A[j]:=T;
     end;
   end;
  Sort(p,j);
  Sort(j+1,q);
 end;
End;
procedure TForm1.Button1Click(Sender: TObject);  //заполнение
  var
  B:array[1..n] of integer;
 k,j:integer;
 begin    begin
W:=StrToInt(Edit1.Text);
Raz:=StrToInt(Edit4.Text);
StringGrid1.ColCount:=W;
StringGrid2.ColCount:=W;
StringGrid3.ColCount:=W;
end;
for j:=1 to w do begin
  A[j]:=Random(Raz);
  L[j]:=A[j];
   StringGrid1.Cells[j-1,0]:=IntToStr(a[j]); Randomize;
   end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var k,m:integer;
h,min,s,ms:word;
B:array[1..n] of integer;
begin
 Label7.Caption:=Floattostr(time);
 h:=0;min:=0;s:=0;ms:=0;
d1:=Now;
 for k:=1 to w do begin
   Sort(p,k);
  Sort(k+1,q); end;
  for m:=1 to w do begin
   StringGrid2.Cells[m-1,0]:=IntToStr(a[m]); end;
   Decodetime(Time-Strtofloat(label7.caption),h,min,s,ms);
     label7.Caption:=inttostr(s)+' ' +'сек' + ' '+ Inttostr(ms)+ ' '+'мсек';
 end;
  Procedure Sort1(p,q : integer); {p,q — индексы начала и конца сортируемой части массива}
Var i,j,r,T : integer;
Begin
 if p<q then {массив из одного элемента тривиально упорядочен}
 begin
  r:=L[p];
  i:=p-1;
  j:=q+1;
  while i<j do
   begin
    repeat
     i:=i+1;
    until L[i]<=r;
    repeat
     j:=j-1;
    until L[j]>=r;
    if i<j then
     begin
      T:=l[i];
      L[i]:=L[j];
      L[j]:=T;
     end;
   end;
  Sort1(p,j);
  Sort1(j+1,q);
 end;
End;
procedure TForm1.Button3Click(Sender: TObject);
var k,m:integer;
hi,mini,si,msi:word;
B:array[1..n] of integer;
begin
 Label8.Caption:=Floattostr(time);
 hi:=0;mini:=0;si:=0;msi:=0;
 for k:=1 to w do begin
   Sort1(p,k);
  Sort1(k+1,q); end;
  for m:=1 to w do begin
   StringGrid3.Cells[m-1,0]:=IntToStr(l[m]);end;
    Decodetime(Time-Strtofloat(label8.caption),hi,mini,si,msi);
     label8.Caption:= inttostr(si)+' ' +'сек' + ' '+ Inttostr(msi)+ ' '+'мсек';
 end;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 23:49     Каскадное слияние со специальным распределением
Посмотрите здесь:

Не получаеться программа (сортировка распределением) C++
C++ Создание массива с равномерным распределением
генерация случайных чисел с заданным распределением вероятности C++
C++ Проблемы при работе с динамическим распределением памяти
C++ Сортировка методом каскадного слияния со специальным распределением
Вывести числа со специальным форматом C++
Подкорректировать код (сортировка распределением) C++

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

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

Текущее время: 04:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru