Professional Documents
Culture Documents
Algoritmo
La estrategia de divide y vencers se utiliza en ordenacin rpida. A continuacin de la
etapa de recursin se describe:
1.
Elija un valor de pivote. Tomamos el valor del elemento medio como valor de
pivote, pero puede ser cualquier valor, que est en el rango de valores ordenados,
incluso si no lo hace presente en la matriz.
2.
3.
Aviso, que mostramos aqu slo el primer paso de recursin, con el fin de no hacer
demasiado largo ejemplo. Pero, de hecho, {1, 2, 5, 7, 3} y {14, 7, 26, 12} son ordenados
a continuacin, de forma recursiva.
Por qu funciona?
En el algoritmo de paso de particin divide la matriz en dos partes y cada elemento de una
de la parte izquierda es menor o igual que cada elemento b de la parte derecha. Tambin
ayb satisfacer a b pivote desigualdad. Despus de la terminacin de la recursin llama
tanto de las partes se convierten en ordenada y, teniendo en cuenta los argumentos
mencionados anteriormente, todo el conjunto est ordenada.
anlisis de complejidad
En la clasificacin rpida promedio tiene O (n log n) la complejidad, pero fuerte prueba
de este hecho no es trivial y no se presentan aqu. An as, se puede encontrar la prueba
en [1] . En el peor caso, clasificacin rpida se ejecuta O (n2), pero en la mayora de los
datos de "prcticas" funciona muy bien y supera a otros O (n log n) algoritmos de
ordenacin.
Fragmentos de cdigo
algoritmo de particin es importante per se, por lo tanto, puede llevarse a cabo como
una funcin separada. El cdigo para C ++ contiene la funcin slida para la
clasificacin rpida, pero el cdigo de Java contiene dos funciones separadas para la
particin y tipo, segn corresponda.
Java
particin int (int arr [], int izquierda, derecha int)
{
int i = izquierdo, J = derecha;
int tmp;
int = [(arr pivote izquierdo + derecho) / 2];
while (i <= j) {
mientras que (arr [i] <pivote)
i ++;
mientras que (arr [j]> pivote)
j--;
si (i <= j) {
tmp = arr [i];
arr [i] = arr [J];
arr [j] = tmp;
i ++;
j--;
}
};
i volver;
}
C ++
QuickSort vaco (int arr [], int izquierda, derecha int) {
int i = izquierdo, J = derecha;
int tmp;
int = [(arr pivote izquierdo + derecho) / 2];
/ * * Particin /
while (i <= j) {
mientras que (arr [i] <pivote)
i ++;
mientras que (arr [j]> pivote)
j -;
si (i <= j) {
tmp = arr [i];
arr [i] = arr [J];
arr [j] = tmp;
i ++;
j -;
}
};
/ * * Recursin /
si (a la izquierda <j)
QuickSort (arr, izquierda, j);
si (i <derecha)
QuickSort (arr, i, a la derecha);
}