algoritmo de fusión gráfico especie (versión Java)

Combinar tipo: el uso de pensamiento (recursivamente) el método de partición, la secuencia de toda la matriz se divide en dos secuencias, dos secuencias de repetición en las respectivas sub-secuencias, utilizando el pensamiento recursivo para resolver uno de los sub-problemas.

Combinar tiempo especie complejidad: O (n * LGN)
normalizado enfermedad ordenada complejidad espacial: O (n)

Combinar tipo de dos core:
núcleo a: fusionar la secuencia de dos ordenado. Comparando el primer número de las dos series, que tomarán pequeña que luego dejar que el número de columnas en un movimiento hacia atrás, uno de los conocidos de secuencia se desplaza a la última, se añadió otra secuencia atrás en el orden de la secuencia se han encaminado a la .
Core II: Las dos partes de la matriz se convierte en una secuencia ordenada. La matriz se divide en el grupo A, B, son cada uno subdividido en dos sub-grupos, sub-cabo cuando sólo un grupo de datos, este grupo puede ser considerado dentro del grupo ha alcanzado un ordenada, y los dos en combinación. Dicha primera descomposición recursiva del número de columnas para completar las columnas de fusión en combinación tipo.

el código de Java:

public class MermeSort {
    //将两个有序序列进行合并
    public static void mermeArray(int[] arrs,int first, int mid, int last, int[] temp){
        int f = first;
        int m = mid;
        int n = mid + 1;
        int l = last;
        int k = 0;

        //将一个有序序列归并完成
        while(f <= m && n <= l){
            if(arrs[f] < arrs[n]){
                temp[k++] = arrs[f++];
            }else{
                temp[k++] = arrs[n++];
            }
        }

        //如果剩下左边的序列,则将左边的序列依次添加到temp后面
        while(f <= m){
            temp[k++] = arrs[f++];
        }

        //如果剩下的是右边的序列,则将右边的序列添加到temp后面
        while(n <= last){
            temp[k++] = arrs[n++];
        }

        //将temp中的有序序列依次拷贝到arrs序列相应的位置(first到last之间的这段序列)
        for (int i = 0; i < k; i++) {
            arrs[first+i] = temp[i];
        }
    }

    public static void mermeSort(int[] arrs, int first, int last, int[] temp){
        if(first < last){
            int mid = (first + last) / 2;

            mermeSort(arrs,first,mid,temp);//对first--last的前一半的元素进行排序

            mermeSort(arrs, mid+1, last, temp);//对first--last的后一半的元素进行排序

            mermeArray(arrs,first,mid,last,temp);//对first--last左右两边拍好的两个序列进行归并
        }
    }
}

Mucha gente recursividad mirado, fuerza muy ignorante, me paro y analizo de nuevo, y dibujar la figura siguiente:
Escribir imágenes describen aquí

Publicado 77 artículos originales · ganado elogios 39 · Vistas a 80000 +

Supongo que te gusta

Origin blog.csdn.net/qq_33824312/article/details/72696232
Recomendado
Clasificación