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).
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!
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