Tecnología

Inicio

Combinar recursiva Ordenar en Python

Combinar recursiva Ordenar en Python


La clasificación es tradicionalmente una tarea difícil en la informática. La elección de un algoritmo de clasificación que sea eficiente y rápido puede ser difícil. A menudo, la elección algoritmo eficiente implica el conocimiento de los datos que se están ordenadas, y las clases especializadas generalmente funciona mucho mejor que los algoritmos de clasificación generalizadas. Sin embargo, ciertos tipos, tales como el "fusionar tipo", puede trabajar en situaciones generalizadas por romper conjuntos y clasificación de piezas más pequeñas de forma recursiva.

La lista

Una especie de combinación es un "divide y vencerás" algoritmo, ya que se requiere porciones de las listas y de forma continua los rompe en dos mitades hasta llegar a los elementos individuales de la lista, que luego se fusionaron en orden. Por ejemplo, comenzar con una lista numérica como

5 6 2 4 1 9 8 3 7

Ordenar una lista como ésta con una especie de combinación requerirá reducir a la mitad el tamaño de la lista varias veces hasta que exista cada número básico solo. Entonces, el tipo 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 sencilla:

def fusionar (primero, segundo)

Tomando dos listas, el método será unirlos comenzando al principio de cada lista. A continuación, añade la siguiente cantidad menor de cada lista en una nueva lista. El resultado es una lista ordenada. (Recuerde insertar adecuadamente pestaña espacio en blanco después de que el "tiempo" y "if / else" declaraciones.):

mientras i <len (primero) y j <len (segundo):

si es la primera [i] <= segundo [j]:

new_list.append (primera [i])

i = i + 1

más:

new_list.append (segundo [j])

j = j + 1}

Por último, después del fin de una lista, los valores restantes se colocan en la nueva lista:

new_list + = primera [i:]

new_list + = segundo [J:]

volver end_list

Combinar Condiciones de clasificación

La combinación real impulsa tipo el algoritmo de clasificación principal. Hay dos principales partes funcionales: el aspecto condicional de que se detenga la recursión una vez que las listas se subdividen y la recursividad real que reduce a la mitad las listas. La condición de parada es lo primero:

mergesort def (lista):

si len (lista) == 1:

lista de regreso

Esto asegura que cuando una lista de sub alcanza sólo un elemento, ese elemento se devuelve el fin de que se va a combinar con los otros números.

Combinar Ordenar recursividad

La segunda mitad de la clase es la recursividad. Tras la instrucción "if" / condicional, de la siguiente manera:

más:

media = len (lista) / 2

start = mergesort (lista [media:])

final = mergesort (lista [: media])

de combinación de retorno (inicio, final)

Debido a la recursividad, después de que las listas se dividen en elementos individuales, el algoritmo de seguimiento de vuelta hasta el último método ejecutado. Así, en el momento en el estado de "fusión de retorno (inicio, final)" se ejecuta, el algoritmo devuelve una lista de fusionado, ordenados de dos combinado previamente, las listas ordenadas de menor tamaño.