Tabla de contenido
1. Clasificación de selección directa
1.2 Proceso de implementación de clasificación de selección directa
1.4 Seleccionar y ordenar directamente el código fuente
2.1 El concepto de clasificación de montones
2.2 Código fuente de clasificación de almacenamiento dinámico
prefacio
La clasificación por selección tiene dos comunes [clasificación por selección directa], [clasificación por montón]
1. Clasificación de selección directa
1.1 Idea básica
Pensamiento avanzado: después de atravesar una vez, no solo podemos seleccionar el número más pequeño, sino también el número más grande
1.2 Proceso de implementación de clasificación de selección directa
①: seleccione el elemento de datos con el código de clave más grande ( más pequeño ) en el conjunto de elementos array[i]--array[n-1]②: Si no es el último ( primer ) elemento de este grupo de elementos, cámbielo por el último (primer) elemento de este grupo de elementos③: En la colección array[i]--array[n-2] ( array[i+1]--array[n-1] ), repita los pasos anteriores hasta que quede 1 elemento en la colección.
1.3 Ayudas de animación
clasificación de selección
1.4 Seleccionar y ordenar directamente el código fuente
void SelectSort(int* a, int n)
{
assert(a);
int begin = 0, end = n - 1;
while (begin < end)
{
int mini = begin, maxi = begin;
for (int i = begin + 1; i <= end; ++i)
{
if (a[i] < a[mini])
mini = i;
if (a[i] > a[maxi])
maxi = i;
}
Swap(&a[begin], &a[mini]);
// 如果begin和maxi重叠,那么要修正一下maxi的位置
if (begin == maxi)//如果走了这一步代表第一个数就是最大的
{
maxi = mini;
}
Swap(&a[end], &a[maxi]);
++begin;
--end;
}
}
1.5 Resumen de características del género de selección directa
1. El pensamiento de selección y clasificación directa es muy fácil de entender, pero la eficiencia no es muy buena. rara vez se usa en la práctica2. Complejidad de tiempo: O(N^2) [Las mejores y peores complejidades de tiempo son ambas O(N^2)]3. Complejidad del espacio: O(1)4. Estabilidad: Inestable
2. Clasificación en montón
2.1 El concepto de clasificación de montones
¿Por qué construir una gran pila?
Cree un montón grande, el elemento superior del montón es el número más grande, deje que el elemento superior del montón se intercambie con el último elemento y luego ajuste hacia abajo, tenga en cuenta: cuando se ajusta hacia abajo aquí, el tamaño de matriz ajustado es -1, eso es, el ajuste justo antes del intercambio Los datos
2.2 Código fuente de clasificación de almacenamiento dinámico
void HeapSort(int* a, int n)
{
// 建堆方式2:O(N)
for (int i = (n-1-1)/2; i >= 0; --i)
{
AdjustDwon(a, n, i);
}
// O(N*logN)
int end = n - 1;
while (end > 0)
{
Swap(&a[0], &a[end]);//这里的end是9,传过去向下调整的元素个数也是9,
//就不会调整刚刚从堆顶传下来的数据
AdjustDwon(a, end, 0);
--end;
}
El siguiente artículo es clasificación de intercambio [clasificación de burbujas], [clasificación rápida]
Si cree que el artículo es bueno, espero su enlace triple de un clic. Su aliento es la fuente de motivación para mi creación. ¡Trabajemos juntos y nos vemos en la cima! ! !