Class TM3Array (unit mwFixedRecSort)

Inherits from

TObject

TSub3Array } { TM3Array class

Constructors



Functions

function Add(Item: Pointer): Integer;


procedure Clear;


destructor Destroy;

Destroy } { TM3Array

function Last: Pointer;


procedure MergeSort(SorCompare: TMergeCompare);

Merge } {Non-recursive Mergesort.

procedure QuickSort(SorCompare: TMergeCompare);

Based on a non-recursive QuickSort from the SWAG-Archive.

function Get(Index: Integer): Pointer;


procedure Merge(SorCompare: TMergeCompare);

QuickSort } {This is a three way merge routine.

procedure Put(Index: Integer; Item: Pointer);


procedure Expand;


procedure SetCapacity(NewCapacity:Integer);


Properties

property Capacity : Integer


property Count : Integer


property Items : Pointer


property M3Array : PMergeArray


Events

Variables

fCapacity : Integer;


FCount : Integer;


FLeftArray : TSub3Array;


FM3Array : PMergeArray;


FMidArray : TSub3Array;


FRightArray : TSub3Array;


SwapArray : PMergeArray;


TempArray : PMergeArray;



Constructors


Functions


function Add(Item: Pointer): Integer;


procedure Clear;


destructor Destroy;

Destroy } { TM3Array


function Last: Pointer;


procedure MergeSort(SorCompare: TMergeCompare);

Merge } {Non-recursive Mergesort. Very fast, if enough memory available. The number of comparisions used is nearly optimal, about 3/4 of QuickSort. If comparision plays a very more important role than exchangement, it outperforms QuickSort in any case. ( Large keys in pointer arrays, for example text with few short lines. ) From all Algoritms with O(N lg N) it's the only stable, meaning it lefts equal keys in the order of input. This may be important in some cases.


procedure QuickSort(SorCompare: TMergeCompare);

Based on a non-recursive QuickSort from the SWAG-Archive. ( TV Sorting Unit by Brad Williams )


function Get(Index: Integer): Pointer;


procedure Merge(SorCompare: TMergeCompare);

QuickSort } {This is a three way merge routine. Unfortunately the " Merge " routine needs additional memory


procedure Put(Index: Integer; Item: Pointer);


procedure Expand;


procedure SetCapacity(NewCapacity:Integer);


Properties


property Capacity : Integer


property Count : Integer


property Items : Pointer


property M3Array : PMergeArray


Events


Variables


fCapacity : Integer;


FCount : Integer;


FLeftArray : TSub3Array;


FM3Array : PMergeArray;


FMidArray : TSub3Array;


FRightArray : TSub3Array;


SwapArray : PMergeArray;


TempArray : PMergeArray;