bl791's picture
download
raw
2.75 kB
/*
* Quicksort by Quintin Stone
* Version 1.0
* The quicksort algorithm for TADS 2. Uses global to store the list
* being sorted. Public domain.
*/
quicksort: function(list) {
global.quicksortlist := list;
global.doquicksort;
return global.quicksortlist;
global.quicksortlist := [];
}
modify global
partition(start, end) = {
local pivot, bottom, top, done;
// Partition around the last value
pivot := self.quicksortlist[end];
// Start outside the area to be partitioned
bottom := start-1;
top := end;
done := nil;
// Until all elements are partitioned...
while (!done) {
// Until we find an out of place element...
while (!done) {
// ... move the bottom up.
bottom ++;
// If we hit the top...
if (bottom = top) {
// ... we are done.
done := true;
break;
}
// Is the bottom out of place?
if (self.quicksortlist[bottom] > pivot) {
// Then put it at the top...
self.quicksortlist[top] := self.quicksortlist[bottom];
// ... and start searching from the top.
break;
}
}
// Until we find an out of place element...
while (!done) {
// ... move the top down.
top := top-1;
// If we hit the bottom...
if (top = bottom) {
// ... we are done.
done := true;
break;
}
// Is the top out of place?
if (self.quicksortlist[top] < pivot) {
// Then put it at the bottom...
self.quicksortlist[bottom] := self.quicksortlist[top];
// ...and start searching from the bottom.
break;
}
}
}
// Put the pivot in its place.
self.quicksortlist[top] := pivot;
// Return the split point
return top;
}
subquicksort(start, end) = {
local split;
// If there are two or more elements...
if (start < end) {
// ... partition the sublist...
split := self.partition(start, end);
// ... and sort both halves.
self.subquicksort(start, split-1);
self.subquicksort(split+1, end);
} else {
return;
}
}
doquicksort() = {
self.subquicksort(1, length(self.quicksortlist));
}
;

Xet Storage Details

Size:
2.75 kB
·
Xet hash:
ec3725680d1787ba8e5bb98c70f66bda9e67240a4ac690662ffd24689f5b00e8

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.