Skip to content

Instantly share code, notes, and snippets.

@loromits
Last active June 19, 2018 08:45
Show Gist options
  • Save loromits/c32eea5f39679ee94351cf53b275087e to your computer and use it in GitHub Desktop.
Save loromits/c32eea5f39679ee94351cf53b275087e to your computer and use it in GitHub Desktop.
extension Array {
func quickSorted(_ areInIncreasingOrder: (Element, Element) -> Bool) -> Array {
guard count > 1, let lastElement = last else { return self }
var (preceding, successing) = (Array(), Array())
dropLast().forEach { areInIncreasingOrder($0, lastElement) ? preceding.append($0) : successing.append($0) }
return preceding.quickSorted(areInIncreasingOrder) + [lastElement] + successing.quickSorted(areInIncreasingOrder)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment