A classificação é tradicionalmente uma tarefa difícil em ciência da computação . A escolha de um algoritmo de ordenação que é eficiente e rápida pode ser difícil . Muitas vezes, eficiente escolha algoritmo envolve o conhecimento dos dados a serem ordenados , e os tipos especializados costumam funcionar muito melhor do que generalizada algoritmos de ordenação . No entanto, certos tipos , como o " merge sort ", pode trabalhar em situações generalizadas por quebrar conjuntos e triagem pequenos pedaços de forma recursiva. A Lista
Um merge sort é um " dividir e conquistar" algoritmo, em que é preciso porções das listas e continuamente quebra-los em metades até atingir elementos únicos da lista , que depois são incorporadas em ordem. Por exemplo, começar com uma lista numérica como
5 6 2 4 1 9 8 3 7
Classificando uma lista como esta com um merge sort exigirá reduzir pela metade repetidamente o tamanho da lista até que cada número básico existe sozinho. Em seguida, a espécie pode comparar os números e colocá-los juntos na ordem correta ( menor para o maior , neste caso).
O método Merge
O método merge é simples:
def merge ( primeira, segunda )
Levando duas listas , o método irá fundi-las , começando no início de cada lista. Em seguida, ele acrescenta o seguinte valor mínimo de cada lista em uma nova lista . O resultado é uma lista ordenada . ( Lembre-se de inserir corretamente guia espaço em branco após as declarações ", enquanto " e " if /else" . ) :
Enquanto i < len (primeiro) e j < len ( segundo) :
se primeiro [i] < = segundo [j] :
new_list.append ( primeiro [i])
i = i + 1
mais:
new_list.append ( segundo [j] )
j = j + 1 }
Finalmente, depois de uma lista termina , os valores restantes são colocados na nova lista :
new_list + = primeiro [i : ]
new_list + = segundo [j ]:
retornar end_list
merge sort Condições
a mesclagem real leva tipo do algoritmo de classificação principal. Existem duas principais partes funcionais : o aspecto condicional que pára a recursão uma vez que as listas são subdivididos ea recursão real que metades das listas. A condição de parada vem em primeiro lugar :
def mergesort (lista) :
if len (lista) == 1 :
retornar lista
Isso garante que quando uma lista de sub atinge apenas um elemento , esse elemento é retornado para que ele a ser mesclado com outros números.
Merge Sort recursão
a segunda metade do o tipo é a recursão. Após a instrução "if" /condicional , como segue:
mais:
middle = len ( lista ) /2
start = mergesort (lista [ meio : ] )
end = mergesort (lista [: média ] )
merge retorno ( início, fim)
Devido a recursão, após as listas são divididas em elementos únicos , o algoritmo volta rastreia até o último método executado. Então , no momento em que a declaração " merge retorno ( início, fim) " executa , o algoritmo retorna um mesclado, lista de dois mescladas anteriormente , classificado listas de tamanho menor classificada.