58 / 57 / 5
Регистрация: 01.12.2009
Сообщений: 177
1

Внутреннее естественное слияние

13.05.2011, 20:08. Показов 2094. Ответов 3
Метки нет (Все метки)

собственно сортировка массива естественным слиянием.
(Без использования файлов) Внутренняяя!!
В инете особо ничего не нашел, на форуме так же. Если у кого-то есть реализация - буду рад.

Добавлено через 3 часа 7 минут
up.
очень нужно.

Добавлено через 19 часов 53 минуты
По-другому называют метод Фон Неймана...
ребят ну подорвитесь кто нить помочь.
Основное отличие от простого слияния - длина серий изначально неизвестна
Тут есть часть кода
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2011, 20:08
Ответы с готовыми решениями:

Естественное слияние для файлов
Дан файл f, компоненты которого являются целыми числами. Известно, что никакая из компонент этого...

Внутреннее естественное соединение
Доброй ночи уважаемой! Cтолкнулся с такой проблемой! Мне нужно связать 4 таблицы с помощью...

Естественное двухпутевое слияние
Реализация связи элементов линейного списка - указатели. Способ организации линейного связанного...

Естественное слияние файлов
Естественное слияние файлов 0,5 мб

3
1 / 1 / 1
Регистрация: 07.05.2011
Сообщений: 9
13.05.2011, 22:39 2
там этоже слияние только на с++
Создать шаблон функции, выполняющий сортировку слиянием (Метод Фон Неймана) в массиве (ответ Ai)

Добавлено через 42 минуты
вот еще нашел на паскале
Pascal
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
(*******************************************************
Процедура для сортировки массива.
Принимает:
    *массив значений a с индексами элементов от 0 до N-1
    *число элементов N
*******************************************************)
procedure NeumanSort(var Arr : array of Real; N : Integer);
type
    PTArr = ^TArr;
    TArr = array[0 .. pred(maxint div sizeof(real))] of real;
var
    C           :   Boolean;
    I,I1,I2,
    N1,N2,J,K   :   Integer;
    Tmp         :   Real;
    BArr        :   PTArr;
    MergeLen    :   Integer;
begin
    GetMem(BArr, (N - 1) * sizeof(real));
 
    MergeLen:=1;
    c:=True;
    while MergeLen<n do
    begin
        if C then
        begin
            i:=0;
            while i+MergeLen<=n do
            begin
                i1:=i+1;
                i2:=i+MergeLen+1;
                n1:=i+MergeLen;
                n2:=i+2*MergeLen;
                if n2>n then n2:=n;
                while (i1<=n1)or (i2<=n2) do
                begin
                    if i1>n1 then
                    begin
                        while i2<=n2 do
                        begin
                            inc(i);
                            BArr^[i-1]:=Arr[i2-1];
                            i2:=i2+1
                        end;
                    end
                    else
                    begin
                        if i2>n2 then
                        begin
                            while i1<=n1 do
                            begin
                                inc(i);
                                BArr^[i-1]:=Arr[i1-1];
                                i1:=i1+1
                            end;
                        end
                        else
                        begin
                            if Arr[i1-1]>Arr[i2-1] then
                            begin
                                inc(i);
                                BArr^[i-1]:=Arr[i2-1];
                                i2:=i2+1
                            end
                            else
                            begin
                                inc(i);
                                BArr^[i-1]:=Arr[i1-1];
                                i1:=i1+1
                            end;
                        end;
                    end;
                end;
            end;
            i:=i+1;
            while i<=n do
            begin
                BArr^[i-1]:=Arr[i-1];
                inc(i);
            end;
        end
        else
        begin
            i:=0;
            while i+MergeLen<=n do
            begin
                i1:=i+1;
                i2:=i+MergeLen+1;
                n1:=i+MergeLen;
                n2:=i+2*MergeLen;
                if n2>n then n2:=n;
                while (i1<=n1)or (i2<=n2) do
                begin
                    if i1>n1 then
                    begin
                        while i2<=n2 do
                        begin
                            inc(i);
                            Arr[i-1]:=BArr^[i2-1];
                            i2:=i2+1
                        end;
                    end
                    else
                    begin
                        if i2>n2 then
                            while i1<=n1 do
                            begin
                                inc(i);
                                Arr[i-1]:=BArr^[i1-1];
                                i1:=i1+1
                            end
                        else
                        begin
                            if BArr^[i1-1]>BArr^[i2-1] then
                            begin
                                inc(i);
                                Arr[i-1]:=BArr^[i2-1];
                                i2:=i2+1
                            end
                            else
                            begin
                                inc(i);
                                Arr[i-1]:=BArr^[i1-1];
                                i1:=i1+1
                            end;
                        end;
                    end;
                end;
            end;
            inc(i);
            while i<=n do
            begin
                Arr[i-1]:=BArr^[i-1];
                inc(i);
            end;
        end;
        MergeLen:=2*MergeLen;
        c:=not(C);
    end;
    if not(C) then
    begin
        i:=1;
        repeat
            Arr[i-1]:=BArr^[i-1];
            inc(i);
        until not(i<=n);
    end;
 
    FreeMem(BArr, (N - 1) * sizeof(real));
end;
0
58 / 57 / 5
Регистрация: 01.12.2009
Сообщений: 177
13.05.2011, 23:14  [ТС] 3
это простое слияние.
0
22 / 22 / 8
Регистрация: 12.02.2012
Сообщений: 137
14.05.2013, 00:54 4
странно поиск работает, на самом деле.
а ведь алгоритмы эти уже на этом форуме расписаны.
даже в 2ух вариантах
Сортировка простым слиянием
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2013, 00:54
Помогаю со студенческими работами здесь

Естественное двухпутевое слияние
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int Merge (int mass1, int mass2) { int...

Внешние сортировки. Сортировка слиянием. Естественное слияние
Пом-гите решить, заранее благодарен.)) Билет 9 1 .Внешние сортировки. Сортировка слиянием....

Внешняя сортировка , нужно отсортировать числа в текстовом файле , метод естественное слияние , вспомогательных файла 2
Главное чтобы числа сортировались в файле , а заполнялись рандомно , если кто то возьметься...

внутреннее сопротивление
Элемент замыкается один раз внешним сопротивлением 8 ом . В другой раз на внешнем сопротивлении...


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

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

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