Estructura de datos: algoritmo de clasificación común (2): clasificación de inserción directa (implementación de C ++)

Estructura de datos: algoritmo de clasificación común (2): clasificación de inserción directa

Tipo de inserción:

1. Idea: En cada paso, se inserta un registro para ordenar en la posición apropiada de la secuencia de palabras previamente ordenada de acuerdo con el tamaño del código de secuencia, hasta que todas las inserciones estén ordenadas.
2. La pregunta clave: busque la posición de inserción adecuada en la secuencia ordenada anteriormente.
Método: en clasificación de inserción directa , clasificación de inserción binaria , clasificación de Shell

Clasificación por inserción directa

1. Idea básica:

En cada paso, se inserta un registro a clasificar en la posición apropiada de la secuencia de palabras previamente clasificada de acuerdo con el tamaño de su código de secuencia (después de encontrar la posición apropiada de atrás hacia adelante), hasta que todas las inserciones estén clasificadas. (Es el método de ordenación más simple. Su operación básica es insertar un registro en una lista ordenada que ha sido ordenada para obtener una nueva lista ordenada con el número de registros incrementado en 1.)

2. Ejemplo

*** Ejemplo 1: Ordene la matriz a [6] = {20,30,40,10,60,50} utilizando el método de inserción directa ***

img

[Fuente de la imagen: https://www.cnblogs.com/zwtgyh/p/10631760.html]

Código

El primer método de implementación: usar dos bucles for

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	/* 插入排序*/
	int num[6] = { 20, 30, 40, 10, 60, 50 };
	int temp;
	int i, j;
	int length = sizeof(num) / sizeof(num[0]);
	for (i = 1; i < length; i++)
	{
		temp = num[i];    //待排序元素
		for (j = i - 1; j >= 0 && num[j] > temp; j--)
		{
			num[j + 1] = num[j];
		}
		num[j + 1] = temp;
	}
	for (int i = 0; i < length; i++)
	{
		cout << num[i] << " ";
	}
	return 0;
}

El segundo método de realización:

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	/* 插入排序*/
	int num[6] = { 20, 30, 40, 10, 60, 50 };
	int pos, temp;
	int length = sizeof(num) / sizeof(num[0]);
	for (int i = 1; i < length; i++)
	{
		pos = i - 1;    //有序序列的最后一个元素位置
		temp = num[i];    //保存待排序元素的值
		while (pos >= 0 && num[pos] > temp)
		{
			num[pos + 1] = num[pos];
			pos--;
		}
		num[pos + 1] = temp;    //将待排序元素插入数组中
	}
	for (int i = 0; i < length; i++)
	{
		cout << num[i] << " ";
	}
	return 0;
}

** Ejemplo 2: Ordenar la matriz b [15] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48} usando la ordenación por inserción directa

img

[Fuente de la imagen: https://www.cnblogs.com/zwtgyh/p/10631760.html]

Código

El mismo método que el anterior, ambos métodos se pueden realizar

método uno:

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	/* 插入排序*/
    int num[15] = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
	int temp;
	int i, j;
	int length = sizeof(num) / sizeof(num[0]);
	for (int i = 1; i < length; i++)
	{
		temp = num[i];    //待排序元素
		for (int j = i - 1; j >= 0 && num[j] > temp; j--)
		{
		C	num[j + 1] = num[j];
		}
		num[j + 1] = temp;
	}
	for (int i = 0; i < length; i++)
	{
		cout << num[i] << " ";
	}
	return 0;
}

Método 2:

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	/* 插入排序*/
	int num[15] = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
	int pos, temp;
	int length = sizeof(num) / sizeof(num[0]);
	for (int i = 1; i < length; i++)
	{
		pos = i - 1;    //有序序列的最后一个元素位置
		temp = num[i];    //保存待排序元素的值
		while (pos >= 0 && num[pos] > temp)
		{
			num[pos + 1] = num[pos];
			pos--;
		}
		num[pos + 1] = temp;    //将待排序元素插入数组中
	}
	for (int i = 0; i < length; i++)
	{
		cout << num[i] << " ";
	}
	return 0;
}

3. Resumen:

1. El mejor caso para la ordenación por inserción es que la matriz ya está en orden. En este momento, solo se requieren n-1 comparaciones y la complejidad de tiempo es O (n)

2. El peor de los casos es que la matriz se ordena en orden inverso. En este momento, se requieren n (n-1) / 2 comparaciones y n-1 operaciones de asignación (insertar).

3. En promedio, la complejidad del algoritmo de ordenación por inserción es O (n2)

4. En términos de complejidad del espacio, el método de inserción directa es la clasificación en el lugar y la complejidad del espacio es (O (1))

Supongo que te gusta

Origin blog.csdn.net/qq_43801020/article/details/108134951
Recomendado
Clasificación