Groovy отличный язык, если захотелось прям с ходу взять и написать какой-то алгоритм или скрипт. Советую всем программистам иногда “разминать” свои интерпрайзные мозги какими-нибудь задачками.
Этот алгоритм, наверное, является самым популярным алгоритмом сортировки. Он весьма прост, быстр и сортирует задействуя минимальное количество дополнительной памяти. Для большинства задач, где требуется сортировка “Quick sort” является хорошим выбором.
{% highlight java %} // массив, который будем сортировать def a = [1,5,7,8,45,7,45,34,45,78,9]
/**
Печать массива. Наверное, такой метод, уже есть, елнь было искать. */ void printArr(a) {
a.each{i ->
print i + ', '
}
}
/**
- Сортировка */ void sort(a) { sort(a, 0, a.size() - 1) }
void sort(a, s, e) { int index = partition(a, s, e)
printArr(a);
if (s < index -1 )
sort(a, s, index -1)
if (index < e)
sort(a, index, e)
}
/**
Находим “средний” элемент и сортируем относительно него */
def partition(a, s , e) { int p = (s + e) / 2def i = s; def j = e; def pivot = a[p]; println “pivot=” + pivot
while (i<=j) { while (a[i] < pivot) { i++; }
while (a[j] > pivot) { j-- } println "i=" + i + " j=" + j def tmp; if (i<=j) { tmp = a[i] a[i] = a[j] a[j] = tmp println "swap " + a[i] + " " + a[j] + " i j " + i + "-" + j i++ j-- } printArr(a);
} println “index=” + i
return i }
println “Исходный массив:” printArr(a);
sort(a) println “Отсортированный:” printArr(a) {% endhighlight %}