Classificação de listas de dados apresenta um dos problemas mais desafiadores para os programadores de computador , porque é difícil de conceituar e implementar algoritmos de ordenação eficientes em linguagens de programação . Sorting requer considerável cópia , movimentação e leitura de dados para trabalhar . Assim , os programadores se concentrar no desenvolvimento de algoritmos de classificação eficientes e genéricos. Um deles, o merge sort , funciona dividindo uma lista de valores , uma e outra forma recursiva para "dividir e conquistar " o problema. Desde merge sort é concebido como uma solução genérica , a maioria dos idiomas, incluindo Java , têm maneiras de implementá-lo. Mesclar Classe
Um merge sort recebe uma lista a ser classificada e recursivamente divide a lista até chegar a valores individuais , como números individuais. O tipo , em seguida, recombina os números em ordem de classificação , acabou retornando uma lista ordenada . Uma classe classificação básica em Java vai conter uma lista para classificar, e chamar um merge principal função de classificação define :
classe Direta {
int público [] x ;
void main ( string [ ] args ) { public static
x = [ 5, 6, 3, 4, 7, 8 , 10, 2];
mergesort (x , 0, x . comprimento -1) ; }}
merge Sort função
Fora da classe principal residirá uma função merge sort . Estes segmentos de função uma série de números para classificar na lista. Inicialmente, essa faixa vai representar toda a lista, mas como o merge sort continua , vai demorar apenas metade da lista até chegar entradas individuais. Em seguida , a função merge sort vai recombinar os elementos em grandes listas que são classificados ( Fonte 2 ) :
public void mergesort (int baixa, int oi ) {
if ( baixo < oi ) {int meio = (baixo + oi ) /2; mergesort ( baixa, média ); mergesort ( média + 1 , oi ); fundir (baixa, média, oi );}}
função direta Básico
A função de fusão irá combinar duas listas depois de classificá-los . Se a função recebe elementos únicos , ele irá requisitá-los . Caso contrário, ele terá duas listas separadas , e, dependendo do desejo do fim programador -los em ordem crescente ou decrescente :
merge private void (int baixa, int meio , int oi ) {
int [ ] copy = new int [ x.length -1] ;
//Copiar ambas as partes para a matriz auxiliar for (int i = baixo ; i < = oi ; i + +) { cópia [i ] = x [ i] ;}
int i = baixa; int j = meio + 1; int k = baixo ; while ( i < = meio && j < = oi ) {if ( cópia [ i ] < = copiar [j] ) { x [ k] = copiar [i] ; i + + ;} else { x [ k] = copiar [j] ; j + + ;} k + +; } //copie o resto do lado esquerdo da matriz em matriz de destino while ( i < = meio ) { x [k ] = copiar [i] ; k + +; i + + ;} }
< br > Merge Sort Recurse
a função " mergesort " recursivamente divide a lista. Primeiro, ele subdivide a lista original pela metade para cada vez que ele próprio chama de forma recursiva. Quando a recursão atingir um único dígito , a função depois recua e começa a ordenar a lista. Cada vez que a função recua para uma chamada de função anterior, se funde duas metades de uma lista menor, eventualmente, trabalhar de volta para a lista completa . A " fusão " função parece estar a fazer o trabalho pesado , organizando e cópia valores na lista, mas o coração de um tipo de mesclagem está na função enganosamente simples " mergesort " .
< Br >