Ocho tipos de selección ordenada

Tipo de inserción directa

  • Insertar un elemento en una matriz ordenada se puede usar como base de un método de clasificación
  • Un conjunto con un solo elemento es un conjunto ordenado. Para un conjunto de n elementos, puede comenzar desde el conjunto de unidades formado por el primer elemento e implementar continuamente la operación de inserción
  • Inserte el segundo elemento para obtener una matriz ordenada de 2 elementos. Inserte el tercer elemento para obtener una matriz ordenada de 3 elementos
  • Repita de esta manera para obtener una matriz ordenada de n elementos

Ejemplos

Inserte directamente la secuencia: 6, 5, 8, 4, 3, 1

  • La parte gris en la figura representa la secuencia a ordenar
  • La parte transparente en la figura representa la secuencia ordenada
int main () 
{ 
    int a [ 10 ] = { 6 , 5 , 8 , 4 , 3 , 7 }; 

    int temp, j;
    para ( int i = 1 ; i < 6 ; ++ i) { 
        temp = a [i];
        para (j = i - 1 ; j> = 0 && temp <a [j]; - j) { 
            a [j + 1 ] = a [j]; 
        } 
        a [j + 1] = temp; 
    } 
    j = 0 ;
    while (j < 6 ) { 
        printf ( " % d " , a [j]);
        ++ j; 
    } 
    devuelve  0 ; 
}

Análisis de la complejidad del tiempo.

Seleccione la capa más interna insertando el código de clasificación directamente

a [j + 1 ] = a [j];

Como una declaración de operación básica

  1. Considere el peor de los casos, donde se invierte toda la secuencia, O (n ^ 2)
  2. Considere el mejor caso donde se ordena toda la secuencia, O (n)

En resumen, la complejidad de tiempo promedio de este algoritmo es O (n ^ 2)

Análisis de complejidad espacial.

  • El espacio de almacenamiento auxiliar requerido por el algoritmo no cambia con el tamaño de la secuencia a clasificar, es una constante, O (1)

 

Tipo de media inserción

  • Similar a la idea de la clasificación por inserción directa, la diferencia es que el método para encontrar la posición de inserción es diferente, y la clasificación por mitad de inserción utiliza el método de media búsqueda para encontrar la posición de inserción
  • Busque la posición de inserción del registro R [i] en la secuencia ordenada por media búsqueda

Ejemplos

La secuencia: 13,38,49,65,76,97,27,49 es una secuencia de medio inserto.

Los primeros 6 elementos han sido secuenciados, encuentre la posición de inserción de 27

  1. mid = (0 + 5) / 2 = 2, la posición actual, 27 <49, la posición de inserción de 27 está en la mitad inferior de 49
  2. h = mid-1, mid = (0 + 1) / 2 = 0, posición actual, 27> 13, la posición de inserción 27 está en la mitad superior de 13
  3. bajo = medio + 1, medio = (1 + 1) / 2 = 1, 27 <38, la posición de inserción de 27 está en la mitad inferior de 38
  4. high = m-1 = 0, high <low, la mitad de la búsqueda finaliza, la posición de inserción de 27 es después de high, y el elemento detrás de la posición de inserción se mueve hacia atrás

 

 

 

int main () 
{ 
    // a [0] es la ubicación donde se almacena la variable temporal 
    int a [ 9 ] = { 0 , 13 , 38 , 49 , 65 , 76 , 97 , 27 , 49 };
     int low, high, mid;
     para ( int i = 2 ; i <= 8 ; ++ i) { 
        a [ 0 ] = a [i]; 
        bajo = 1 ; 
        alto = i- 1 ;
        while (bajo <= alto) { 
            medio = (bajo + alto) / 2 ;
            if (a [mid]> a [ 0 ]) { 
                high = mid - 1 ; 
            } 
            else { 
                bajo = medio + 1 ; 
            }                 
        } 
        para ( int j = i - 1 ; j> = alto + 1 ; - j) { 
            a [j + 1 ] = a [j]; 
        } 
        a [alto + 1] = a [ 0 ]; 
    } 
    int j = 0 ;
    while (j < 8 ) { 
        printf ( " % d " , a [j]);
        ++ j; 
    } 
    devuelve  0 ; 
}

Análisis de la complejidad del tiempo.

  • La clasificación por inserción binaria es adecuada para escenas con una gran cantidad de palabras clave. En comparación con la clasificación por inserción directa, el tiempo dedicado a la clasificación por inserción a la mitad para encontrar la posición de inserción se reduce considerablemente
  • La ordenación de media inserción es igual a la ordenación de inserción directa en el número de movimientos de palabras clave, por lo que la complejidad temporal es la misma que la ordenación de inserción directa
  • Se puede ver que el mejor caso de la complejidad temporal del tipo de media inserción es O (nlog2n), el peor caso es O (n ^ 2), y el caso promedio es O (n ^ 2)

Análisis de complejidad espacial.

Igual que el tipo de inserción directa, O (1)

Clasificación de colinas (clasificación incremental más pequeña)

  • Divida la secuencia a ordenar en varias subsecuencias, e inserte y clasifique estas subsecuencias directamente

  • Si el incremento es 1, inserte ordenar directamente

Este método es esencialmente un método de inserción de paquetes

  • Comparar números que están muy separados (llamados deltas), de modo que cuando el número se mueve a través de múltiples elementos, una sola comparación puede eliminar intercambios de múltiples elementos

Idea de algoritmo

  • Primero divida el grupo de números que se ordenarán en varios grupos de acuerdo con un incremento d, y los subíndices registrados en cada grupo difieren en d

  • Ordene todos los elementos en cada grupo, y luego use un pequeño incremento para ordenarlo, y luego ordene en cada grupo

  • Cuando el incremento se reduce a 1, el número entero a ordenar se divide en un grupo, la clasificación se completa

Ejemplos

  • Secuencia original: 49 38 65 97 76 13 27 45 55 04

  • Los elementos señalados por la línea divisoria se insertan y ordenan directamente
anular ShellSort ( int r [], int n) { 
     int i, j, d;
    int x; 
    d = n / 2 ; // d = n >> 1 
    while (d> = 1 ) {
         para (i = d; i <n; i ++ ) {   
            x = r [i];
             para (j = id; j> = 0 ; j- = d) {
                 if (r [j]> x) { 
                    r [j + d] = r [j]; 
                } else {
                     descanso ;
                }                 
            }                
            r [j + d] = x; 
         } // para i 
       d >> = 1 ; 
      } // while 
} // ShellSort

La clasificación de las colinas es inestable.

  • El último valor de la secuencia de incremento debe ser 1

  • Los valores en la secuencia incremental no deben tener un factor común que no sea 1

Complejidad de tiempo

  • El tiempo está relacionado con la selección del tamaño del paso, pero actualmente no hay una expresión analítica correspondiente

Complejidad espacial O (1)

Supongo que te gusta

Origin www.cnblogs.com/YC-L/p/12689017.html
Recomendado
Clasificación