core :: Comparator :: quick_sort
array
between from
and to
indicesWorst case: O(n^2), Average case: O(n lg n)
var a = [5, 2, 3, 1, 4]
default_comparator.quick_sort(a, 0, a.length - 1)
assert a == [1, 2, 3, 4, 5]
var a2 = new Array[Int]
default_comparator.quick_sort(a2, 0, a2.length - 1)
assert a2 == new Array[Int]
var a3 = [1]
default_comparator.quick_sort(a3, 0, a3.length - 1)
assert a3 == [1]
# Quick-sort `array` between `from` and `to` indices
# Worst case: O(n^2), Average case: O(n lg n)
#
# var a = [5, 2, 3, 1, 4]
# default_comparator.quick_sort(a, 0, a.length - 1)
# assert a == [1, 2, 3, 4, 5]
# var a2 = new Array[Int]
# default_comparator.quick_sort(a2, 0, a2.length - 1)
# assert a2 == new Array[Int]
# var a3 = [1]
# default_comparator.quick_sort(a3, 0, a3.length - 1)
# assert a3 == [1]
fun quick_sort(array: Array[COMPARED], from: Int, to: Int) do
if from >= to then return
var pivot = array[from]
var i = from
var j = to
while j > i do
while i <= to and compare(array[i], pivot) <= 0 do i += 1
while j > i and compare(array[j], pivot) >= 0 do j -= 1
if j > i then
var t = array[i]
array[i] = array[j]
array[j] = t
end
end
array[from] = array[i-1]
array[i-1] = pivot
sub_sort(array, from, i-2)
sub_sort(array, i, to)
end
lib/core/collection/sorter.nit:103,2--133,4