[Estructura de datos: clasificación manual de rasgaduras, parte 1] Clasificación por inserción

Tabla de contenido

1. Algoritmos de clasificación comunes

2. La idea del género de inserción

2.1 Idea básica

2.2 Clasificación por inserción directa

2.2.1 La idea de la clasificación de un solo paso

2.2.2 Implementación del código de clasificación de un solo paso

3. Insertar código de clasificación

4. Clasificación por inserción + prueba de impresión

5. Complejidad temporal de la ordenación por inserción

5.1 En el peor de los casos

5.2 Mejor caso

6. Resumen de las características del género de inserción directa


1. Algoritmos de clasificación comunes

 

2. La idea del género de inserción

2.1 Idea básica

La clasificación por inserción directa es un método de clasificación por inserción simple. Su idea básica es:
insertar los registros a clasificar en una secuencia ordenada uno por uno de acuerdo con el tamaño de sus valores clave hasta que se inserten todos los registros, para obtener un nuevo orden. secuencia.

En la práctica, cuando jugamos al póquer, usamos la idea de clasificación por inserción:

 

2.2 Clasificación por inserción directa

Al insertar el i-ésimo (i>=1) elemento, el arreglo anterior[0], arreglo[1],...,arreglo[i-1] se han ordenado, y en este momento se usa el código de clasificación de arreglo [i] y Array[i-1], array[i-2], ... compare el orden de los códigos de clasificación, encuentre la posición de inserción e inserte array[i], y el orden de los elementos en la posición original se desplaza hacia atrás.

2.2.1 La idea de la clasificación de un solo paso

Marcamos la parte inferior del último elemento de la matriz como final, cada vez que el número que se va a insertar se coloca primero en la posición final+1, y luego se usa una variable temporal tmp para guardar el número, y la comparación comienza desde el final y avanza Si tmp es más pequeño que end, deje que end se mueva hacia atrás un bit, y luego compare tmp con end-1, end-2... Cuando tmp es mayor que el elemento en una posición determinada, inserte tmp en la posición subíndice + 1 posición, se completa la clasificación de un solo paso.

 

2.2.2 Implementación del código de clasificación de un solo paso

int tmp = a[end + 1];
while (end >= 0)
{
    if (a[end] > tmp)
    {
        a[end + 1] = a[end];
        end--;
    }
    else
    {
        break;
    }
}
a[end + 1] = tmp;

Hay una forma inteligente de escribir en nuestro código, cuando a[end] < tmp, salta fuera del bucle y luego inserta tmp en una posición [end+1]. Esto puede resolver la inserción de a[end] <tmp y el primer elemento <tmp al mismo tiempo.

3. Insertar código de clasificación

La clasificación por inserción consiste en clasificar toda la matriz una vez sobre la base de la clasificación de un solo paso. Agregamos una capa de bucle al código de clasificación de un solo paso para lograr la clasificación por inserción.

for (int i = 1; i < n; i++)
{
    int end = i - 1;
    int tmp = a[i];

    while (end >= 0)
    {
        if (a[end] > tmp)
        {
            a[end + 1] = a[end];
            end--;
        }
        else
        {
            break;
        }
    }
    a[end + 1] = tmp;
}

4. Clasificación por inserción + prueba de impresión

void Print(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}
void InsertSort(int* a, int n)
{
	for (int i = 1; i < n; i++)
	{
		int end = i - 1;
		int tmp = a[i];

		while (end >= 0)
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}
void TestInsert()
{
	int a[] = { 9,8,7,6,5,4,3,2,1 };
	InsertSort(&a, sizeof(a) / sizeof(int));
	Print(&a, sizeof(a) / sizeof(int));
}
int main()
{
	TestInsert();
	return 0;
}

Mostrar resultados:

 

5. Complejidad temporal de la ordenación por inserción

5.1 En el peor de los casos

El peor de los casos es el orden inverso, que es el peor de los casos, y la complejidad del tiempo es: O(N^2) .

5.2 Mejor caso

La mejor situación es que el orden está en orden, no necesitamos ajustar, solo necesitamos atravesar la matriz una vez, complejidad de tiempo: O(N) .

6. Resumen de las características del género de inserción directa

1. Cuanto más cerca esté el conjunto de elementos del orden, mayor será la eficiencia de tiempo del algoritmo de clasificación de inserción directa
2. Complejidad de tiempo: O(N^2)
3. Complejidad de espacio: O(1), es un
algoritmo de clasificación estable4 . Estabilidad: Estable

Supongo que te gusta

Origin blog.csdn.net/Ljy_cx_21_4_3/article/details/131501971
Recomendado
Clasificación