"Quicksort — Lomuto partition. Sorts an Array in place. Classic-corpus program for the Smalltalk-on-SX runtime." Object subclass: #Quicksort instanceVariableNames: ''! !Quicksort methodsFor: 'sort'! sort: arr ^ self sort: arr from: 1 to: arr size! sort: arr from: low to: high | p | low < high ifTrue: [ p := self partition: arr from: low to: high. self sort: arr from: low to: p - 1. self sort: arr from: p + 1 to: high]. ^ arr! partition: arr from: low to: high | pivot i tmp | pivot := arr at: high. i := low - 1. low to: high - 1 do: [:j | (arr at: j) <= pivot ifTrue: [ i := i + 1. tmp := arr at: i. arr at: i put: (arr at: j). arr at: j put: tmp]]. tmp := arr at: i + 1. arr at: i + 1 put: (arr at: high). arr at: high put: tmp. ^ i + 1! !