[Siete clasificaciones comunes en estructuras de datos (2)] - clasificación por selección [clasificación por selección directa] y [clasificación por montón]

Tabla de contenido

prefacio

1. Clasificación de selección directa

1.1 Idea básica

1.2 Proceso de implementación de clasificación de selección directa

1.3 Ayudas de animación

1.4 Seleccionar y ordenar directamente el código fuente

2. Clasificación en montón

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

Seleccione el elemento más pequeño (o más grande) de los elementos de datos que se ordenarán cada vez y guárdelo al comienzo de la secuencia hasta que se agoten todos los elementos de datos que se ordenarán.
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áctica
2. 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

Heapsort (Heapsort) se refiere a un algoritmo de clasificación diseñado utilizando una estructura de datos de árbol apilado (montón), que es un tipo de clasificación por selección. Selecciona datos a través del montón.
Cabe señalar que debe crear un montón grande para el orden ascendente y un montón pequeño para el orden descendente.

¿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;
	}
Debido a que aprendí sobre montones cuando estaba aprendiendo árboles binarios, si desea obtener más información sobre la clasificación de montones, puede ir al blog anterior de Xiaoyu. El enlace es el siguiente: [Haga clic para saltar]
Explicación detallada del montón: versión en lenguaje C [estructura de datos] - Blog de crecimiento de Xiaoyu Daniu

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

Supongo que te gusta

Origin blog.csdn.net/qq_58286439/article/details/131728105
Recomendado
Clasificación