Clasificación es tradicionalmente una tarea difícil en la informática. La elección de un algoritmo de clasificación que es eficiente y rápido puede ser difícil . A menudo , eficiente algoritmo de selección implica el conocimiento de que los datos sean ordenados , y ordena especializados suelen funcionar mucho mejor que los algoritmos de clasificación generalizadas . Sin embargo , ciertos tipos , como el " tipo de combinación , " pueden trabajar en situaciones generalizadas por romper conjuntos y clasificación pedazos más pequeños de forma recursiva. La Lista
merge sort es un "divide y vencerás " algoritmo, ya que toma partes de las listas y de forma continua los rompe por la mitad hasta llegar a los elementos individuales de la lista , que luego se fusionaron en orden. Por ejemplo , comience con una lista numérica como
5 6 2 4 1 9 8 3 7
Ordenar una lista de este tipo con una mezcla tipo requerirá reducir a la mitad el tamaño de la lista varias veces hasta que cada número básico existe solo. Entonces , la clase puede comparar los números y ponerlos juntos en el orden correcto ( menor a mayor, en este caso) .
El método Merge
El método de combinación es sencillo:
def merge ( primero , segundo )
Tomar dos listas , el método unirlos comenzando a principios de cada lista. A continuación, se añade el siguiente menor cantidad de cada lista en una nueva lista . El resultado es una lista ordenada . ( Recuerde insertar correctamente pestaña espacio en blanco después de que el " tiempo " y declaraciones " if /else" . ) :
While i < len ( primero) y j < len ( segundos ) :
< p> si primero [ i ] < = segundos [ j ] :
new_list.append ( primera [ i])
i = i + 1
más:
new_list.append ( segundos [ j ] )
j = j + 1 }
Finalmente, después de unos extremos de la lista, los valores restantes se colocan en la nueva lista :
new_list + = primera [ i: ]
new_list + = segundos [c : ]
regreso end_list
Merge Sort Condiciones
la actual fusión especie impulsa el algoritmo de clasificación principal . Hay dos partes funcionales : el aspecto condicional de que se detenga la recursión vez se subdividen en las listas y la repetición real que reduce a la mitad las listas. La condición de parada es lo primero :
def mergesort ( lista ) :
si len ( lista ) == 1 :
regreso Lista
Esto asegura que cuando una lista de sub alcanza sólo un elemento , ese elemento se devuelve con el fin para el que se va a combinar con los otros números.
Merge Ordenar recursividad
La segunda mitad del el tipo es la recursividad. Tras el " if" /condicional, de la siguiente manera :
más:
media = len ( lista ) /2
start = mergesort ( lista [ media : ] )
end = mergesort ( lista [: media ] )
regreso merge (inicio, fin)
Debido a la recursividad , después de que las listas se dividen en elementos individuales , el algoritmo las pistas hasta el último método de ejecución. Así , en el momento de la declaración de "retorno de combinación (inicio , final) " ejecuta el algoritmo devuelve un combinado, lista ordenada de los dos anteriormente se fusionaron , listas ordenadas de menor tamaño .