1 /* vim: set et sts=4 sw=4 fdm=marker fmr={,} fdn=1 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Ordena texto ASCII o Unicode.
8 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9 * Puede copiar, modificar y distribuir este programa bajo los términos de
10 * la licencia GPL (http://www.gnu.org/).
12 * Creado: Mon Sep 22 21:00:15 ART 2003
24 /// Intercambia 2 índices del vector.
26 void swap(std::vector< T >& v, int i, int j) {
32 /// Genera un índice al azar.
33 int rnd(int i, int j) {
34 return i + rand() % (j-i+1);
37 /// Algoritmo de ordenamiento generico para ordenar un vector.
39 void quicksort(std::vector< T >& v, int left, int right) {
40 // Asigno como último al de la izquierda.
42 // Si los extremos se juntan, termina.
47 swap(v, left, rnd(left, right));
48 for (int i = left + 1; i <= right; i++) {
54 // Llama recursivamente para los fragmentos.
55 quicksort(v, left, last - 1);
56 quicksort(v, last + 1, right);