Capítulo base de algoritmo

Ordenar la inserción

La ordenación por inserción funciona como muchas personas dispuestas en una mano y jugando a las cartas. Inicialmente, la mano izquierda está vacía y la siguiente carta boca sobre la mesa. Entonces, cada vez que tomamos una tarjeta de la mesa y la inserta en la posición correcta en la mano izquierda. Para encontrar la ubicación correcta de una tarjeta, de derecha a izquierda, vamos a compararlo con cada tarjeta ya en la mano, como se muestra en la Fig.

 la implementación del código

plantilla < clase T>
 void InsertionSort (T a [], int nums) {
     para ( int i = 1 ; i <nums; i ++ ) { 
        tecla T = a [i];
        int j = i - 1 ;
        mientras que (j> = 0 && un [j]> clave) { 
            a [j + 1 ] = a [j]; 
            j - ; 
        } 
        Un [j + 1 ] = clave; 
    } 
}

 

Divide y vencerás

Muchos algoritmos útiles en la estructura recursiva es: con el fin de resolver un problema dado, uno o varios algoritmos llama a sí misma recursivamente para resolver un número de sub-temas estrechamente relacionados. Estos algoritmos suelen seguir la idea de dividir y conquistar: el problema original en varios de menor escala, pero similar al problema original de sub-problemas, para resolver estos problemas parciales de forma recursiva, y luego combinar las soluciones de estos sub-temas para establecer la solución problema original .

Partición en cada modelo recursivo tiene tres pasos :

  • Descomponer el problema original en varias sub-problemas, estos sub-problemas son ejemplos más pequeñas del problema original.
  • Resolver estos sub-problemas, de forma recursiva resolver cada subproblema. Entonces, si el tamaño de los sub-problemas es lo suficientemente pequeño, solución directa.
  • El combinado solución de estos sub-solución del problema al problema original.

tipo de combinación de algoritmo en plena conformidad con el modo de sub-regla. Intuitivamente funciona como sigue:

  • Descomposición : La secuencia tiene n elementos a clasificar en dos sub-secuencias que tienen cada una N / 2 elementos.
  • Solución : ordenamiento por mezcla de forma recursiva dos secuencias alineadas.
  • Combinar : combinar dos secuencias ordenadas.

Cuando la longitud de la secuencia que ser resuelto es 1, recursiva "comenzó a subir," no hacer ningún trabajo en este caso, debido a que la longitud de cada secuencia han sido ordenados.

la implementación del código

plantilla < clase T>
 void Merge (T a [], int p, int q, int r) {
     int n1 = q - p + 1 , n2 = r - q; 
    T * izquierda = nueva T [n1 + 1 ], * derecha = nueva T [n2 + 1 ]; 
para ( int i = 0 ; i <n1; i ++ ) { izquierda [i] = a [p + i]; } Izquierda [n1] = max; para ( int i = 0; i <n2; i ++ ) { derecha [i] = a [q + i + 1 ]; } Derecho [n2] = max;
int i = 0 , j = 0 ; para ( int k = p; k <= r; k ++ ) { si (a la izquierda [i] < derecho [j]) { a [k] = Izquierda [i]; i ++ ; } Más { a [k] = derecha [j]; j ++ ; } } }
Plantilla
< Clase T> void mergesort (T a [], int p, int r) { si (p < r) { int q = (p + r) / 2 ; Mergesort (a, p, q); Mergesort (a, q + 1 , r); Combinar (a, p, q, r); } }

 

Supongo que te gusta

Origin www.cnblogs.com/bjxqmy/p/12498525.html
Recomendado
Clasificación