| /* | |
| * 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.