Модератор: Модераторы
Seenkao писал(а):Мне надо прыгнуть с кода на код, для проверки работоспособности программы.
alexs писал(а):Модераторы - уберите тему во флуд.
я бы до такого не додумался...iskander писал(а):Имхо бывают вещи и похуже, например вот это.
Что по мнению знатоков не так с этой сортировкой и можно ли это исправить? Варианты ответа:
ну да, ну да... может голову включим? Или вы каждый раз при проверке пользуетесь другим языком, а потом этот код ещё и на паскаль переделываете? (конечный результат программы должен быть от тестового кода). Или вы не тестируете свой код?sign писал(а):За плечами и Фортран, и ПЛ-1, и бейсик с ихними goto
Seenkao писал(а):я бы до такого не додумался.
Seenkao писал(а):iskander, не уверен вообще, что быстрее. А если пузырёк немного оптимизировать, то уж точно не быстрее.
... хотя ... опять от умельца зависит. )))
var
massive: array[0..100] of integer; // можно не определённый массив
procedure Sort;
var
i, n: integer;
begin
i := length(massive);
dec(i);
while i > 0 do
begin
if massiv[i] > massiv[i + 1] then
begin
n := massive[i];
massive[i] := massive[i + 1];
massive[i + 1] := n;
end;
dec(i);
end;
end;
Seenkao писал(а):P.S. какой ерундой я страдаю...
iskander писал(а):runewalsh прошу не беспокоиться
class procedure classname.QSort(p: pElem; count, reasonable: SizeUint
{$ifdef allow_mt}; parallel: pParallelQSort {$endif} {$ifdef param}; const param: ParamType {$endif});
var
L, R: SizeUint;
t, avg: SwapTemp;
begin
repeat
if count <= SelectionThreshold then
begin
SelectionSort(p, count {$ifdef param}, param {$endif});
exit;
end;
if reasonable = 0 then
begin
HeapSort(p, count {$ifdef param}, param {$endif});
exit;
end;
reasonable := reasonable div 2 + reasonable div 4;
avg := SwapTemp(Median(p, count {$ifdef param}, param {$endif})^);
R := 0;
L := count - 1;
repeat
while {$define _1 := p[R]} {<} {$define _2 := Elem(avg)} less_ do inc(R);
while {$define _1 := Elem(avg)} {<} {$define _2 := p[L]} less_ do dec(L);
if R <= L then
begin
t := SwapTemp(p[R]); SwapTemp(p[R]) := SwapTemp(p[L]); SwapTemp(p[L]) := t;
inc(R);
dec(L);
end;
until R > L;
// [0 .. L], [R .. count - 1]
if count - R <= L then
begin
if R + 1 < count then
{$ifdef allow_mt} ParallelQSort.MaybeSpawn {$else} QSort {$endif}
(p + R, count - R, reasonable {$ifdef allow_mt}, parallel {$endif} {$ifdef param}, param {$endif});
count := L + 1;
end else
begin
if L > 0 then
{$ifdef allow_mt} ParallelQSort.MaybeSpawn {$else} QSort {$endif}
(p, L + 1, reasonable {$ifdef allow_mt}, parallel {$endif} {$ifdef param}, param {$endif});
p += R;
count -= R;
end;
until false;
end;
runewalsh писал(а):Почему?
iskander писал(а):Вместо сортировки выбором чаще применяют сортировку вставкой
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8