home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
t
/
tcsel003.zip
/
QSORT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-10-16
|
2KB
|
83 lines
unit Qsort;
{
Copyright 1990 Trevor J Carlsen
All rights reserved.
Author: Trevor J Carlsen
PO Box 568
Port Hedland WA 6721
A general purpose sorting unit.
}
interface
type
updown = (ascending,descending);
str255 = string;
datatype = str255; { the type of data to be sorted }
dataptr = ^datatype;
ptrarray = array[1..10000] of dataptr;
arrayptr = ^ptrarray;
const
maxsize : word = 10000;
SortType : updown = ascending;
procedure QuickSort(var da; left,right : word);
{============================================================================}
implementation
procedure swap(var a,b : dataptr); { Swap the pointers }
var t : dataptr;
begin
t := a;
a := b;
b := t;
end;
procedure QuickSort(var da; left,right : word);
var
d : ptrarray absolute da;
pivot : datatype;
lower,
upper,
middle : word;
begin
lower := left;
upper := right;
middle:= (left + right) div 2;
pivot := d[middle]^;
repeat
case SortType of
ascending : begin
while d[lower]^ < pivot do inc(lower);
while pivot < d[upper]^ do dec(upper);
end;
descending: begin
while d[lower]^ > pivot do inc(lower);
while pivot > d[upper]^ do dec(upper);
end;
end; { case }
if lower <= upper then begin
{ swap the pointers not the data }
swap(d[lower],d[upper]);
inc(lower);
dec(upper);
end;
until lower > upper;
if left < upper then QuickSort(d,left,upper);
if lower < right then QuickSort(d,lower,right);
end; { QuickSort }
end.