Ordenamiento de burbuja recursiva

Harshit Jindal 12 octubre 2023
  1. Algoritmo recursivo de ordenamiento de burbuja
  2. Ejemplo de algoritmo recursivo de Ordenamiento de burbuja
  3. Implementación del algoritmo recursivo Ordenamiento de burbuja
  4. Complejidad del algoritmo Ordenamiento de burbuja
Ordenamiento de burbuja recursiva

La ordenamiento de burbuja es un algoritmo de ordenación simple. Funciona mediante la comparación repetida de elementos adyacentes y el intercambio de los mismos si están en el orden incorrecto. Las comparaciones repetidas hacen que el elemento más pequeño/más grande se desplace hacia el final de la array, por lo que este algoritmo se denomina ordenamiento de burbuja. Aunque es ineficiente, sigue siendo la base de los algoritmos de ordenación.

Algoritmo recursivo de ordenamiento de burbuja

Supongamos que tenemos una array sin ordenar A[] que contiene n elementos.

  • Si el tamaño del array A es 1, entonces el array ya está ordenado. Entonces, devuelve.
  • En caso contrario, realiza una pasada de [Ordenamiento de burbuja] iterativo (/es/tutorial/algorithm/bubble-sort/) sobre la subarray dada. Colocará el último elemento en su posición correcta.
  • Utilice la llamada de recursión para realizar los pasos anteriores de nuevo en una subarray más pequeña con el tamaño reducido en uno.

Ejemplo de algoritmo recursivo de Ordenamiento de burbuja

Supongamos que tenemos el array (5,3,4,2,1). Vamos a ordenarlo utilizando el algoritmo de ordenamiento de burbuja.

  • Primer pase:
(5 3 4 2 1) (3 5 4 2 1) (3 < 5 intercambiados)
(3 5 4 2 1) (3 4 5 2 1) (4 < 5 intercambiados)
(3 4 5 2 1) (3 4 2 5 1) (2 < 5 intercambiados)
(3 4 2 5 1) (3 4 2 1 5) (1 < 5 intercambiado)
  • Segundo pase:
(3 4 2 1 5) (3 4 2 1 5)
(3 4 2 1 5) (3 2 4 1 5) (2 < 4 intercambiados)
(3 2 4 1 5) (3 2 1 4 5) (1 < 4 intercambiado)
  • Tercer pase:
(3 2 1 4 5) (2 3 1 4 5) (2 < 3 intercambiado)
(2 3 1 4 5) (2 1 3 4 5) (1 < 3 intercambiado)
  • Cuarto pase:
(2 1 3 4 5) (1 2 3 4 5) (1 < 2 intercambiado)

Obtenemos la array ordenada después de la cuarta pasada - (1 2 3 4 5)

Implementación del algoritmo recursivo Ordenamiento de burbuja

#include <bits/stdc++.h>
using namespace std;
void bubbleSort(int arr[], int n) {
  if (n == 1) return;

  for (int i = 0; i < n - 1; i++) {
    if (arr[i] > arr[i + 1]) {
      swap(arr[i], arr[i + 1]);
    }
  }

  bubbleSort(arr, n - 1);
}
int main() {
  int n = 8;
  int arr[8] = {9, 8, 3, 7, 5, 6, 4, 1};
  cout << "Input arr: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
  bubbleSort(arr, n);  // Sort elements in ascending order
  cout << "Output arr: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
}

Complejidad del algoritmo Ordenamiento de burbuja

Complejidad de tiempo

  • Caso medio

Por término medio, se realizan n-i comparaciones en la quinta pasada de la ordenamiento de burbuja. Por tanto, si hay n pases, la complejidad temporal media puede ser la siguiente.

(n-1) + (n-2) + (n-3) ..... + 1 = n*(n-1)/2

Por tanto, la complejidad temporal es del orden de O(n2).

  • El peor caso

El peor caso se da cuando el array está ordenado de forma inversa, y hay que realizar el máximo número de comparaciones e intercambios.

La complejidad temporal en el peor caso es del orden de O(n2).

  • El mejor caso

El mejor caso se da cuando la array ya está ordenada, y entonces sólo se necesitan N comparaciones.

La complejidad temporal en el mejor caso es O(n).

Complejidad espacial

La complejidad espacial de este algoritmo es O(n) debido a las llamadas recursivas almacenadas dentro de la pila.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

Artículo relacionado - Sort Algorithm