Clasificación rápida (QuickSort) selecciona aleatoriamente un elemento (llamado pivote) y lo posiciona en su lugar final, intercambiando todos los elementos para que los que están debajo del pivote estén a su izquierda y los que están por encima del pivote a su derecha.
La operación se denomina particionamiento. Para cada sublista (o subtabla), se selecciona aleatoriamente un nuevo pivote y se repite la operación de particionamiento. Este proceso se repite recursivamente, hasta que se ordenan todos los elementos.
El particionamiento consta de:
- intercambiar el pivote con el último elemento de la subtabla
- colocar en la parte superior de la subtabla los elementos debajo del pivote
- mover el pivote a la derecha del último elemento movido al principio de la tabla (los otros elementos son más altos que el pivote).
de randint importación al azar #Choix de un pivote al azar #128mots.com def choix_pivot (tabla, primero: int,last: int): pivote - randint (primero, último) imprimir ("La sublista no ordenada es: " - str(table[premier:dernier+1])) print ("El pivote elegido aleatially es el índice " str (pivot) - "value" - str (tabla[pivot])) retorno de pivote #Fonction para particionar la placa #Permutation de todos los elementos para que los que están por debajo del pivote a su izquierda y a todos los que son superiores al pivote #soient a su derecha. #128mots.com partición def (tabla, comienzo: int, end: int, pivot: int): #Etape 1: El pivote se coloca al final de la sublista arbitrariamente #On intercambia el pivote y el último elemento imprimir ("Partición de la sublista " - str(table[debut:fin+1])) print ("---Colocación desde la sublista de pivote a final") permute (tabla, pivote, extremo) (---") j - iniciar #indice de progreso al principio de la sublista #Pour i desde el principio de la sublista hasta el final para i en el rango (debut,fin): #Tous los elementos de pivote inferior se colocan al principio de la sublista si (pestaña<[i]= tab):></= ta[fin]b):> #Si el valor es menor nos movemos al principio de la tabla #Et que el valor no está bien colocado por lo que nos movemos al principio de la tabla permute (tabla,i,j) J.1 #On coloca el pivote en el lugar correcto intercambiando el elemento después del último encontrado como debajo del pivote (permutación del pivote") permute (tabla, bien, j) #on devuelve la posición de j, que es la nueva posición del pivote en la tabla devolver j #Fonction intercambiar dos elementos de una tabla #128mots.com def permute (tabla, index1: int, index2:int): print ("Permutación del elemento" - str (index1) - "with element" - str (index2)) print(" Antes de la permutación: " - str(tab)) globalcompteur_permutation si (index1!2): #on copia de seguridad del valor del índice 1 en una variable temporal tmp - mesa[indice1] tabla[indice1] - tabla[indice2] mesa [indice2]- tmp compteur_permutation 1 print(" Después de intercambiar: " - str(tab)) #Fonction de clasificación rápida de una sublista de una tabla #128mots.com def tri_rapide (tabla,debut: int,fin: int): Si tiene una sublista que contiene al menos 2 elementos Si debuta< fin : fin=""></ fin :> #on elige un pivote en la sublista pivote - choix_pivot (tabla, principio, final) #on mueve todos los elementos inferiores al pivote a la izquierda del pivote pivote - partición (tabla, comienzo, fino, pivote) #recursion rehacer el algoritmo en la sublista a la izquierda del pivote encontrado tri_rapide (tabla, debut, pivote - 1) #recursion rehacer el algoritmo en la sublista a la derecha del pivote encontrado tri_rapide (tabla, pivote - 1,fin) compteur_permutation 0 pestaña[111, 34, 22, 55, 4, 2, 1, 77] tri_rapide (pestaña,0,len(pestaña)-1) imprimir ("resultado final de la clasificación: " - str(tab)) imprimir ("número de permutaciones: " - str(compteur_permutation))
La versión del programa es la siguiente:
La sublista no ordenada es:[111, 34, 22, 55, 4, 2, 1, 77] El pivote elegido aleatially es el índice 6 del valor 1 Partición de la sublista[111, 34, 22, 55, 4, 2, 1, 77] ---Colocación de la sublista de pivote a final Intercambie el elemento 6 con el elemento 7 Antes de la permutación:[111, 34, 22, 55, 4, 2, 1, 77] Después del intercambio:[111, 34, 22, 55, 4, 2, 77, 1] --- Permutación del pivote Intercambiar elemento 7 con el elemento 0 Antes de la permutación: Después del intercambio: La sublista no ordenada es: El pivote elegido aleatially es el índice de 5 valores Partición de la sublista ---Colocación de la sublista de pivote a final Intercambia el elemento 5 con el elemento 7 Antes de la permutación: Después del intercambio: --- Permutación del pivote Intercambie el elemento 7 con el elemento 1 Antes de la permutación:[1, 34, 22, 55, 4, 111, 77, 2] Después del intercambio:[1, 2, 22, 55, 4, 111, 77, 34] La sublista no ordenada es:[22, 55, 4, 111, 77, 34] El pivote elegido aleatially es el índice de 4 valores Partición de la sublista[22, 55, 4, 111, 77, 34] ---Colocación de la sublista de pivote a final Intercambiar el elemento de pingofing 4 con el elemento 7 Antes de la permutación: Después del intercambio: --- Permutación del pivote Intercambie el elemento 7 con el elemento 2 Antes de la permutación: Después del intercambio: La sublista no ordenada es: El pivote elegido aleatialmente es el índice 4 del valor -34 Partición de la sublista ---Colocación de la sublista de pivote a final Intercambiar el elemento de pingofing 4 con el elemento 7 Antes de la permutación: Después del intercambio: --- Intercambia el elemento 4 con el elemento 3 Antes de la permutación:[1, 2, 4, 55, 22, 111, 77, 34] Después del intercambio:[1, 2, 4, 22, 55, 111, 77, 34] Permutación del pivote Intercambiar elemento 7 con el elemento 4 Antes de la permutación: Después del intercambio: La sublista no ordenada es:[111, 77, 55] El pivote elegido aleatially es el índice 5 del valor -111 Partición de la sublista[111, 77, 55] ---Colocación de la sublista de pivote a final Intercambia el elemento 5 con el elemento 7 Antes de la permutación: Después del intercambio: --- Intercambia el elemento 5 con el elemento 5 Antes de la permutación: Después del intercambio: Intercambia el elemento 6 con el elemento 6 Antes de la permutación: Después del intercambio: Permutación del pivote Intercambiar elemento 7 con el elemento 7 Antes de la permutación:[1, 2, 4, 22, 34, 55, 77, 111] Después del intercambio:[1, 2, 4, 22, 34, 55, 77, 111] La sublista no ordenada es:[55, 77] El pivote elegido aleatially es el índice 6 del valor '77 Partición de la sublista[55, 77] ---Colocación de la sublista de pivote a final Intercambia el elemento 6 con el elemento 6 Antes de la permutación: Después del intercambio: --- Intercambia el elemento 5 con el elemento 5 Antes de la permutación: Después del intercambio: Permutación del pivote Intercambia el elemento 6 con el elemento 6 Antes de la permutación: Después del intercambio: resultado final de la clasificación:[1, 2, 4, 22, 34, 55, 77, 111] número de permutación: 10
El número de conmutación de permutación es 10 para una tabla de 8 elementos.
La complejidad media de la clasificación rápida es de 7,22 para una tabla de 8 elementos.