お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"RE:マージソート修正"

この発言は
#00242 べあ さんのソート3種
に対するコメントです

マージソートのコードにミスがあったようです。で、修正版です。 type TMergeList = class(TList) public procedure Sort(Compare: TListSortCompare); end; { TListのSortメッソドを上書きしてしまいましょう。こうすれば、ほかでも   このクラスを利用できます。また、クイックソートの方がいい場合TListに   キャストしてやれば、クイックソートになります} implementation procedure TMergeList.Sort(Compare: TListSortCompare); var Tmp:PPointerList; procedure MergeSort(First,Last: Integer); var I,J,K,P,Mid:Integer; begin if First < Last then begin Mid :=(First + Last) div 2; MergeSort(First,Mid); MergeSort(Mid+1,Last); P := Mid - First + 1; System.Move(List^[First],Tmp^[0], P * SizeOf(Pointer) ); i := Mid + 1; J := 0 ; k := first; while (i <= Last) and (J < P) do if Compare(Tmp^[J],List^[I]) > 0 then begin List^[k] := List^[i]; //後半から書き戻す。 Inc(k);Inc(i); end else begin List^[k] := Tmp^[j]; //作業領域から書き戻す。ここ、間違ってました。m(__)m Inc(k);Inc(J); end; while j < P do begin List^[K] := Tmp^[j]; inc(k);inc(j); end; end; end; begin GetMem(Tmp,(count div 2 + 1) * SizeOf(Pointer)); try MergeSort(0,Count-1); finally FreeMem(Tmp); end; end; 97/12/20(土) 16:53 べあ(BYI15773) Original document by べあ 氏 ID:(BYI15773)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum