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

Estructura de datos: algoritmo de clasificación común (3): clasificación de inserción binaria

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

Orden de inserción binaria

1. Idea básica:

Idea básica: La idea de la ordenación por inserción de dicotomía es la misma que la de inserción directa, excepto que la forma de encontrar una posición de inserción adecuada es diferente. Aquí es encontrar una posición adecuada según la dicotomía, lo que puede reducir el número de comparaciones.

La ordenación por inserción binaria, denominada ordenación binaria, es cuando se inserta el elemento i-ésimo, los elementos 0 ~ i-1 anteriores se reducen a la mitad y el elemento del medio se compara primero. Si es más pequeño, la primera mitad se reduce a la mitad; de lo contrario La segunda mitad se divide por la mitad hasta izquierda <derecha, y luego todos los elementos entre la primera posición del elemento i-ésimo y la posición objetivo se mueven hacia atrás, y el elemento i-ésimo se coloca en la posición objetivo.

De acuerdo con la idea de la búsqueda binaria, los registros a verificar se dividen en listas ordenadas y no ordenadas, y cada vez que la primera clave de la lista desordenada se compara con el registro en el medio de la lista ordenada. Si es menor que el registro, inserte el elemento en la subtabla siguiente; de ​​lo contrario, si es mayor que el registro, inserte el elemento en la subtabla anterior. Itere repetidamente hasta que todos los registros se inserten en la tabla.

2. Ejemplo

Ordene la matriz a [6] = {5,36,24,10,6,12} por orden de inserción binaria

img

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

Código

#include<iostream>
using namespace std;
/*二分查找函数,返回插入下标*/
template <typename T>
int BinarySearch(T array[], int start, int end, T k)
{
	while (start <= end)
	{
		int middle = (start + end) / 2;
		int middleData = array[middle];
		if (middleData > k)
		{
			end = middle - 1;
		}
		else
			start = middle + 1;
	}
	return start;
}
//二叉查找插入排序
template <typename T>
void InsertSort(T array[], int length)
{
	if (array == nullptr || length < 0)
		return;
	int i, j;
	for (i = 1; i < length; i++)
	{
		if (array[i]<array[i - 1])
		{
			int temp = array[i];
			int insertIndex = BinarySearch(array, 0, i, array[i]);//使用二分查找在有序序列中进行查找,获取插入下标
			for (j = i - 1; j >= insertIndex; j--) //移动元素
			{
				array[j + 1] = array[j];
			}
			array[insertIndex] = temp;    //插入元素
		}
	}
}
//主函数
int main() {
	//int *a = Random();
	int a[6] = { 5, 36, 24, 10, 6, 12 };
	InsertSort(a, 6);
	for (int i = 0; i < 6; i++)
	{cout << a[i] << " ";}	
	cout << endl;
	return 0;
}

3. Resumen:

1. Resumen: peor caso: cada vez que se inserta al comienzo de la secuencia ordenada, los elementos de toda la secuencia ordenada deben retroceder y la complejidad del tiempo es O (n2)

2. Mejor caso: la matriz que se va a ordenar está en orden positivo y la posición de cada elemento es su posición de inserción. En este momento, la complejidad del tiempo es solo la comparación. 3. La complejidad del tiempo es O (log2n)

4. Situación media: O (n2)

En términos de complejidad espacial, la inserción binaria también se ordena en el lugar y la complejidad espacial es (O (1)).

Supongo que te gusta

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