El algoritmo de ordenación del montón de Python en menos de 128 palabras

El principio del algoritmo de ordenación del montón es el siguiente:

  • Buscamos al padre del último nudo del árbol y lo tamitamos: el padre de un nudo en un árbol binario corresponde a la ronda inferior de (i-1)/2 con i la posición del nudo en la tabla que almacena el árbol.
  • Tamizar un nudo implica visitar a su hijo derecho e izquierdo e intercambiar la raíz con la más grande de las dos.
  • El árbol se tamiza hasta que alcanza la raíz, el mayor número del árbol está entonces en la posición de la raíz al principio de la pintura.
  • La raíz que es el número más grande se intercambia con la última hoja (es decir, la posición n de la tabla que almacena el árbol de tamaño n). Este número se considera bien ordenado (es decir, está en la última posición y es el más grande)
  • La operación de tamizado e intercambio se repite considerando el subárbol que va de raíz a n-1 (para no mover el número que se ha ordenado correctamente) hasta que lleguemos al cable izquierdo de la raíz (índice 1)

Ver enlace de wikipedia: https://fr.wikipedia.org/wiki/Tri_par_tas

de la importación matemática
#128mots.com
def indice_fils_gauche (noeud_pere:int):
	retorno (noeud_pere - 2) - 1

def indice_fils_droit (noeud_pere:int):
	retorno (noeud_pere - 2) - 2
#Retourne el índice de nodo pere si existe (el nodo debe ser 0)
def indice_noeud_pere (nudo):
	#Si es el redondeo inferior de (nudo-1)/2
	piso de retorno (nudo - 1)/2)

#permute 2 elementos de una tabla e incrementalmente la variable general compteur_permutation que se inicializará en la mano
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 (tabla))
	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(" After permutation: " - str (tabla))

#Tamise un árbol binario de un nudo paramétrico
#1. el nudo se compara con el cable derecho e izquierdo (si existen)
#2. intercambiamos con el valor más alto
#128mots.com
def thames (árbol, nudo, longitud):
	#On visita a la derecha y al hijo izquierdo
	impresión ("Tamisage of" - str (knot) - " tree: " - str (árbol)	
	indexSonRight - indice_fils_droit (nudo)
	IndexLeft - indice_fils_gauche (nudo)
	print ("IndexSonRight" - str (indexSon))
	print ("índice izquierdo"" - str (índice izquierdo)


	si (indexSonRight< longueur): # si le fils droit existe longueur):="" #="" si="" le="" fils="" droit=""></ longueur): # si le fils droit existe>
		si (árb[indiceFilsDroit]ol): #Si[indiceFilsGauche] el hijo derecho es más grande que el cable izquierdo
			si (árb[indiceFilsDroit]ol): #Si[noeud] el alambre derecho es más grande que el nudo tamizado
				permute (árbol, indexSonright,knot)
		elif (árbol [indiceFilsGauche]- árbol): [noeud]#Si el alambre izquierdo es más alto que el nudo tamizado, por lo que se intercambia
			permute (árbol, índice a la izquierda, nudo)
	elif (índice de la izquierda< longueur): #Si le fils gauche existe longueur):="" #si="" le="" fils="" gauche=""></ longueur): #Si le fils gauche existe>
		si (árbol[indiceFilsGauche] - árbol):[noeud] #Si el alambre izquierdo es más alto que el nudo tamizado por lo que intercambiamos
			permute (árbol, índice a la izquierda, nudo)
	print(" Después del tamizado: " - str (árbol))			
#128mots.com

compteur_permutation 0
árbol -[11, 222, 3, 24, 5, 46, 67, 899] #On escribe un árbol en forma de pintura
print ("árbol de inicio: " - str (árbol)

#128mots.com
#Tamisage inicial
#on toma el último elemento del arbe que es una hoja y uno busca a su padre
IndexDuNoeudPere - indice_noeud_pere (árbol)-1) 
#on tamizado se compara con el nudo padre con el hijo derecho e izquierdo
#puis que se intercambia con el valor más alto
para i en el rango (índice DuNoeudPere,-1,-1): #On siftto a la raíz
	thames (árbol,i,len (árbol)

permute (árbol, len (árbol)-1.0) #on intercambia el primer elemento y el último 
#suite tamizado es el mayor valor por lo que se coloca al final de la tabla

#on repite el tamizado
para i en range(len(tree)-1,1,-1): 
	indexDuNoeudPereDeI - indice_noeud_pere (i-1) #on toma el elemento i del arbe que es una hoja y uno busca a su padre
	para j en el rango (índice duKnotPereDeI,-1,-1): #On siftto a la raíz
		thames (árbol, j,i)
	permute (árbol, i-1.0)

impresión ("resultado final de la clasificación: " - str (árbol))
imprimir ("número de permutaciones: " - str(compteur_permutation))