Estructura de datos y algoritmo-C / C ++ realiza el algoritmo de clasificación de selección [colección recomendada]

1. Introducción al ordenamiento por selección

La clasificación por selección (clasificación por selección) es un algoritmo de clasificación simple e intuitivo.
Su idea básica es: primero encuentre el elemento más pequeño (o más grande) en la secuencia sin clasificar, y luego guárdelo al principio de la secuencia; luego, continúe buscando el elemento más pequeño (o más grande) de los elementos restantes sin clasificar, y luego ponerlo al final de la secuencia ordenada. Y así sucesivamente, hasta que todos los elementos estén ordenados.

Dos, seleccione la descripción gráfica de clasificación

Seleccionar código de clasificación

/*
 * 选择排序
 *  * 参数说明:
 *     a -- 待排序的数组
 *     n -- 数组的长度
 */
void select_sort(int a[], int n)
{
    
    
    int i;        // 有序区的末尾位置
    int j;        // 无序区的起始位置
    int min;    // 无序区中最小元素位置

    for(i=0; i<n; i++)
    {
    
    
        min=i;

        // 找出"a[i+1] ... a[n]"之间的最小元素,并赋值给min。
        for(j=i+1; j<n; j++)
        {
    
    
            if(a[j] < a[min])
                min=j;
        }

        // 若min!=i,则交换 a[i] 和 a[min]。
        // 交换之后,保证了a[0] ... a[i] 之间的元素是有序的。
        if(min != i)
            swap(a[i], a[min]);
    }
}

Tomemos la secuencia {20,40,30,10,60,50} como ejemplo para demostrar su proceso de selección y clasificación (como se muestra en la figura siguiente).
Inserte la descripción de la imagen aquí
Proceso de clasificación

  • La primera vez: i = 0. Encuentre el valor mínimo a [3] = 10 en a [1 ... 5], y luego intercambie un [0] por un [3]. Cambio de secuencia numérica: 20,40,30,10,60,50
    -> 10,40,30,20,60,50
  • Pase 2: i = 1. Encuentre el valor mínimo a [3] = 20 en a [2… 5], y luego intercambie a [1] y a [3]. Cambio de secuencia numérica: 10,40,30,20,60,50
    -> 10,20,30,40,60,50
  • La tercera vez: i = 2. Encuentre el valor mínimo en un [3 ... 5] Dado que el valor mínimo es mayor que un [2], no se hace nada para este viaje.
  • Ronda 4: i = 3. Encuentre el valor mínimo en un [4 ... 5] Dado que el valor mínimo es mayor que un [3], no se hace nada para este viaje.
  • Ronda 5: i = 4. Intercambie los datos de un [4] y un [5]. Cambio de secuencia numérica: 10,20,30,40,60,50 -> 10,20,30,40,50,60

El editor recomienda mi propio grupo de intercambio de tecnología de lenguaje linuxC / C ++: [1106675687] He recopilado algunos libros de aprendizaje y materiales de video que creo que es mejor compartir en los archivos del grupo, ¡y puede agregarlos si los necesita!
Inserte la descripción de la imagen aquí

En tercer lugar, la complejidad temporal y la estabilidad del tipo de selección.

Complejidad temporal de la
clasificación por selección La complejidad temporal de la clasificación por selección es O (N2). Suponga que hay N números en la secuencia que se ordena. La complejidad temporal del recorrido es O (N). ¿Cuántos recorridos se necesitan? N-1! Por lo tanto, la complejidad temporal del ordenamiento por selección es O (N2).

Estabilidad de clasificación selectiva La clasificación
selectiva es un algoritmo estable, que satisface la definición de algoritmo estable. Estabilidad del algoritmo: suponga que hay a [i] = a [j] en la secuencia, si antes de ordenar, a [i] está antes de a [j], y después de ordenar, a [i] todavía está antes de a [j]. ¡Entonces este algoritmo de clasificación es estable!

Cuarto, seleccione la implementación de ordenación

Seleccione el
código de implementación de implementación sort C (select_sort.c)

 View Code

Seleccione Ordenar
código de implementación de implementación de C ++ (SelectSort.cpp)

 View Code

Seleccione Ordenar
código de implementación de implementación de Java (SelectSort.java)

View Code

Los principios y los resultados de las tres implementaciones anteriores son los mismos. Aquí está su salida:

before sort:20 40 30 10 60 50 
after  sort:10 20 30 40 50 60

Supongo que te gusta

Origin blog.csdn.net/m0_50662680/article/details/113051262
Recomendado
Clasificación