![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
-Студент- |
![]()
Сообщение
#1
|
Гость ![]() |
Требуется помошью в написании алгоритма не рекурсивной сортировки Хоара на паскале.
![]() ![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
... Хоара на паскале. ![]() А при чем тут язык??.. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(klem4 @ 17.11.2006 7:20) Убрать рекурсию думаю вполне можно. Конечно, можно... Убрать рекурсию можно даже в функции Аккермана... Весь вопрос - КАК... Если за основу брать процедуру HoarFirst из нашего FAQ-а, то ее итеративный вариант может выглядеть, скажем, вот так (вместе с тестовой программой): const n = 20;
Type
arrType = Array[1 .. n] Of Integer;
function _inc(var X: integer): integer;
begin
inc(X);
_inc := X;
end;
function dec_(var X: integer): integer;
begin
dec_ := X;
dec(X);
end;
var
stack_ix: integer;
stack: array[1 .. n] of integer;
procedure push(L, R: integer);
begin
stack[_inc(stack_ix)] := L;
stack[_inc(stack_ix)] := R;
end;
procedure pop(var L, R: integer);
begin
R := stack[dec_(stack_ix)];
L := stack[dec_(stack_ix)];
end;
procedure iterative_hoar(var ar: arrType; left, right: integer);
var
finished: boolean;
X, T, pos_i, pos_j: integer;
begin
if left < right then begin
Push(-1, -1);
Push(left, right);
finished := false;
while not finished do begin
Pop(left, right);
if (left = -1) and (right = -1) then begin
finished := true
end
else begin
pos_i := left; pos_j := right;
x := ar[(left + right) div 2];
Repeat
While ar[pos_i] < x Do Inc(pos_i);
While ar[pos_j] > x Do Dec(pos_j);
If pos_i <= pos_j Then
Begin
T := ar[pos_i]; ar[pos_i] := ar[pos_j]; ar[pos_j] := T;
Inc(pos_i); Dec(pos_j)
End
Until pos_i > pos_j;
If left < pos_j Then push(left, pos_j);
If pos_i < right Then push(pos_i, right);
end;
end;
end;
end;
const
a: arrType = (44, 55, 12, 42, 94, 18, 36, 67, 44, 55,
12, 42, 94, 18, 6, 67, 94, 55, 72, 62);
var i: integer;
begin
writeln('start hoar iterative sort:');
iterative_hoar(a, 1, n);
for i := 1 to n do write(a[i]:3);
writeln;
end.
|
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 5:23 |