16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"コムソート"
この発言に対し以下のコメントが寄せられています
#00179 ひでかず さん RE:ファイル関連で役に立ちそうな関数
//簡単で早いソート。コムソート(Comb Sort)サンプル
バブルソートに簡単な改良を加えるだけで驚異的に高速化されます。
出典は1991年頃の日経エレクトロニクスです。
(原典を捨ててしまっち (^_^; )
Delphi の \demos\threads\SortThds.pas の Procedure TBubbleSort.Sort()
を差し替えて Threaddemo.dpr を実行してください。
{ TBubbleSort }
{ Comb Sort }
procedure TBubbleSort.Sort(var A: array of Integer);
var
I, J, T: Integer;
gap, max : Integer;
swaped : Boolean;
begin
gap := High(A) - Low(A);
max := gap;
repeat
gap := (gap * 3) shr 2; { gap / 1.333 }
case gap of
0: gap := 1;
9, 10: gap := 11;
end;
swaped := False;
for I := 0 to (max - gap) - 1 do
begin
J := I + gap;
if A[i] > A[j] then
begin
VisualSwap(A[i], A[J], i, J );
T := A[i];
A[i] := A[J];
A[J ] := T;
swaped := True;{ 要素の位置を変更した }
if Terminated then Exit;
end;
end;
until( (not swaped) and (gap = 1));
end;
97/11/10(Mon) 00:21am NCC00451 MSHIDA
Original document by MSHIDA 氏 ID:(NCC00451)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|