Clasificación rápida de Python en menos de 128 palabras

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).
Ejemplo de una iteración de particionamiento (fuente wikipedia): Aquí el pivote es 5
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.