¿Para qué sirve la clasificación de burbujas?

Es un tipo de clasificación, que se utiliza mejor cuando los datos son pequeños. es decir, la lista de elementos a ordenar es baja.

Es el algoritmo de clasificación más simple que funciona intercambiando repetidamente los elementos adyacentes si están en orden incorrecto.

Ejemplo:
Primer pase:
( 5 1 4 2 8) -> ( 1 5 4 2 8), Aquí, el algoritmo compara los dos primeros elementos y cambia desde 5> 1.
(1 5 4 2 8) -> (1 4 5 2 8), Intercambiar desde 5> 4
(1 4 5 2 8) -> (1 4 2 5 8), Intercambiar desde 5> 2
(1 4 2 5 8 ) -> (1 4 2 5 8 ), ahora, dado que estos elementos ya están en orden (8> 5), el algoritmo no los intercambia.

Segundo pase:
( 1 4 2 5 8) -> ( 1 4 2 5 8)
(1 4 2 5 8) -> (1 2 4 5 8), Intercambiar desde 4> 2
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8 ) -> (1 2 4 5 8 )
Ahora, la matriz ya está ordenada, pero nuestro algoritmo no sabe si está completa. El algoritmo necesita un pase completo sin ningún intercambio para saber que está ordenado.

Tercer pase:
( 1 2 4 5 8) -> ( 1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8 ) -> (1 2 4 5 8 )

Aquí está el algo para ello:

Suponemos que list es una matriz de n elementos. Suponemos además que la función de intercambio intercambia los valores de elementos de matriz dados.

comenzar BubbleSort (lista)

para todos los elementos de la lista
si lista [i]> lista [i + 1]
swap (lista [i], lista [i + 1])
terminara si
fin de

lista de retorno

Fin BubbleSort

La peor y media complejidad del tiempo del caso: O (n * n). El peor de los casos ocurre cuando la matriz está ordenada inversamente.

Mejor complejidad del tiempo del caso: O (n). El mejor caso ocurre cuando la matriz ya está ordenada.

Espacio auxiliar: O (1)

Casos límite: la ordenación de burbujas toma un tiempo mínimo (orden de n) cuando los elementos ya están ordenados.

Clasificación en el lugar:

Estable:

Debido a su simplicidad, la clasificación de burbujas se usa a menudo para introducir el concepto de un algoritmo de clasificación.
En gráficos de computadora es popular por su capacidad de detectar un error muy pequeño (como el intercambio de solo dos elementos) en arreglos casi ordenados y arreglarlo con una complejidad lineal (2n). Por ejemplo, se usa en un algoritmo de relleno de polígonos, donde las líneas de delimitación se ordenan por su coordenada x en una línea de exploración específica (una línea paralela al eje x) y al incrementar y su orden cambia (se intercambian dos elementos) solo en las intersecciones de dos líneas

Y para que entiendan mejor, aquí está el programa para eso en C ++

// Programa C para la implementación de Bubble sort
#include
intercambio nulo (int * xp, int * yp)
{
int temp = * xp;
* xp = * yp;
* yp = temp;
}

// Una función para implementar el ordenamiento de burbujas
void bubbleSort (int arr [], int n)
{
int i, j;
para (i = 0; i <n-1; i ++)
// Los últimos elementos i ya están en su lugar
para (j = 0; j <ni-1; j ++)
if (arr [j]> arr [j + 1])
swap (& arr [j], & arr [j + 1]);
}

/ * Función para imprimir una matriz * /
vacío printArray (int arr [], int size)
{
para (int i = 0; i <tamaño; i ++)
printf (“% d”, arr [i]);
printf (“\ n”);
}

// Programa de controlador para probar las funciones anteriores
int main ()
{
int arr [] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof (arr) / sizeof (arr [0]);
bubbleSort (arr, n);
printf (“Matriz ordenada: \ n”);
printArray (arr, n);
devuelve 0;
}

En un nivel abstracto, el uso de la clasificación de burbujas es (obviamente suficiente) para ordenar los datos.

El problema con eso, por supuesto, es que, en circunstancias normales, el ordenamiento de burbujas es casi la peor forma posible de ordenar casi cualquier cosa. Si solo tiene una pequeña cantidad de elementos para clasificar, eso ayuda a cubrir muchas de sus deficiencias, pero aun así, una clasificación de inserción (por solo un ejemplo) casi siempre será más rápida.

Así que eso lleva a una pregunta algo más interesante: ¿existe una situación en la que el ordenamiento de burbujas sería una buena elección de algoritmos (aunque, como ya se señaló, en la mayoría de las circunstancias, es bastante horrible?

La respuesta es afirmativa: de hecho, hay circunstancias en las que puede probar que un tipo de burbuja es el mejor conocido y se garantiza que está dentro de un factor constante del mejor tipo posible.

Las circunstancias bajo las cuales eso es cierto son bastante estrechas y es poco probable que surjan en una máquina razonablemente actual, pero existen.

Específicamente, considere una máquina donde los datos que se ordenarán están contenidos en un archivo en cinta. Solo puede leer / escribir hacia adelante a través de ese archivo de principio a fin. su computadora no tiene RAM real y solo tiene dos registros. Por lo tanto, puede leer dos elementos de la cinta y dejarlos como están o manipular esos dos registros. Una vez que haya terminado de procesar un par de registros, puede mover la cinta hacia adelante un registro y mirar dos registros comenzando desde allí. Cuando llegue al final del archivo, puede rebobinar la cinta hasta el principio y repetirla tantas veces como sea necesario (pero no puede rebobinar una cantidad arbitraria; una vez que comience a rebobinar, siempre volverá al principio )

Para este caso limitado, una clasificación de burbujas es el mejor algoritmo de clasificación conocido (y dentro de un factor constante del mejor algoritmo posible).

El tipo de burbuja se hizo conocido en la informática en gran parte porque esencialmente el primer artículo real de ciencias de la computación que incluso intentó hacer cosas como probar la complejidad computacional de un algoritmo, o mostrar las circunstancias bajo las cuales fue óptimo se escribió sobre el tipo de burbuja.

Si tiene que preguntar, ninguno en absoluto.

Dicho esto, recuerdo haber leído una publicación de blog de desarrolladores de juegos. Por razones que son irrelevantes, tuvieron que mantener una lista de entidades en el juego, ordenadas por coordenadas espaciales.

Esta lista necesitaba actualizarse en cada cuadro del juego, por lo que docenas de veces por segundo, de acuerdo con sus puntos de referencia, incluso los tipos integrados eficientes no estaban a la altura de la tarea.

La idea clave que tenían era que sus entidades nunca cambiaban las coordenadas tanto en un solo cuadro que incluso era necesario un reordenamiento completo.

Por lo general, solo uno o dos pases con intercambio eran suficientes para mantener los datos actualizados correctamente, esencialmente, un tipo de burbuja que termina extremadamente rápido cada vez.

Entonces sí, hay circunstancias en las que es útil. Pero nunca entrarás en un proyecto y decidirás usarlo fuera de la puerta. De hecho, lo que debe hacer es olvidar por completo que existen diferentes algoritmos de clasificación … hasta que un analizador le diga que el incorporado es un cuello de botella.

El único objetivo de Bubble Sort es ordenar elementos ( con un tiempo de ejecución horrible ). P.ej:

Original {8, 7, 6, 10, 4, 1, 9, 2, 5, 3}

Ordenado {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Suscríbete a mi canal si quieres. Esta semana lanzaré un curso de estructuras de datos y algoritmos: https://www.youtube.com/channel/

¿Objetivos del tipo burbuja?

Reordenar elementos en un orden dado (generalmente ascendente). Haga eso en el peor momento la complejidad de O (n ^ 2). Mantener el orden relativo de los elementos iguales (también llamado clasificación estable).

Si los elementos ya están ordenados, entonces detecte eso en O (n). Algunas variantes de la clasificación de burbujas pueden ordenar una colección casi ordenada de elementos en O (n), dependiendo de lo que significa “casi”.

La clasificación de burbujas no tiene otro uso que no sea una introducción didáctica a la clasificación. Uno nunca debe usarlo en la práctica.

More Interesting

¿Alguien puede ayudarme a resolver el problema SPOJ "Consulta en un árbol" (QTREE)?

Cómo generar todas las permutaciones de fila de una matriz 2D dada de forma recursiva

¿Hay algún buen sitio para aprender algoritmos / conceptos de programación todos los días (similar a la pregunta SAT del día)?

¿Apache Hadoop es realmente bueno para algoritmos recursivos?

¿Debo aprender algoritmos primero antes de aprender programación? Si es así, ¿cuál es la mejor manera de aprender algoritmos?

¿Cuáles son los tipos más comunes de Bloom Filter y cómo funcionan?

¿Cuál es la mejor manera de saber qué estrategia (codiciosa, dividir y conquistar, programación dinámica) funcionaría mejor para un problema de algoritmo en particular?

¿Qué es un algoritmo eficiente para encontrar un circuito euleriano en un gráfico no dirigido?

¿Cuál es el algoritmo más optimizado para encontrar la suma de la diferencia absoluta de cada par distinto en una matriz entera?

Cómo escribir algoritmos de mapas de ruta como Google Maps

¿Cuánto conocimiento de implementación de algoritmos usan realmente los programadores experimentados?

Cómo aprender estructuras de datos y algoritmos lo suficientemente buenos como para conseguir un trabajo en 10 meses

Descubrí el algoritmo de Dijkstra yo mismo. ¿Puedo decir que soy bueno en informática?

¿Por qué el algoritmo Chandy-Lamport necesita suponer que todos los mensajes llegan exactamente una vez?

¿Cómo se calculan los tiempos de conducción de Google Maps?