Ordenamiento burbuja en Arduino

3 de Octubre - en Arduino

Cuando se realiza la captura de datos en ocasiones es necesario realizar el ordenamiento de los mismos, existen varios algoritmos para realizar este proceso, uno de ellos es el ordenamiento burbuja en donde cada dato tiene un peso y dependiendo de este, se desplazara hacia arriba o hacia abajo.

Ordenamiento burbuja en Arduino

Funcionamiento de ordenamiento burbuja

Este algoritmo basa su funcionamiento en la comparación de los datos de manera secuencial, comparando el primero con el segundo, el segundo con el tercero, el tercero con el cuarto, etc. Cada dato tiene un “peso” (igual a su valor), de modo que en la primera comparación si el segundo dato es mayor que el primero, este tendrá un peso mayor, por lo cual este será movido a una posición mayor desplazando al primero (los datos intercambiaran de posición). En el caso contrario, si el primer dato es mayor  o igual al segundo, no se intercambiaran posiciones. Siempre se dará una mayor posición al dato con más peso.

La comparación de los datos se realizara de manera cíclica hasta que  no exista un cambio de posición en  el ciclo de comparación anterior.

Ejemplo:

Suponiendo el arreglo de datos siguiente: Datos = [ 2, 11, 4 ]

Primer ciclo:

Comparando el Dato 1 con Dato 2: 11 es mayor a 2, por  lo cual Datos = [11, 2, 4]

Comparando el Dato 2 con Dato 3: 4 es mayor que 2, por lo cual Datos =  [11, 4, 2]

Como existió un cambio de posición se realizara otro ciclo de comparación.

Segundo ciclo:

Comparando el Dato 1 con Dato 2: 4 no es mayor a 11, por  lo cual Datos = [11, 4, 2]

Comparando el Dato 2 con Dato 3: 2 es mayor que 4, por lo cual Datos = [11, 4, 2]

No existió un cambio de posición de algún dato, por lo cual se termina el ordenamiento.

Implementación del algoritmo en Arduino

El siguiente código muestra el ejemplo en donde se simula la captura de 15 datos de tipo integer  guardados en un array, posteriormente se realizara la implantación del algoritmo de ordenamiento, una vez que los datos estén ordenados se imprimirán:

#include <SoftwareSerial.h>

//Array de datos, rellenado con datos para el ejemplo
unsigned int datos[15] = {90, 100 , 30, 30, 90, 20, 11, 43, 23, 24, 68, 2, 56, 223, 4};

int ln = 15; //Longitud del array de datos
int tem = 0;//Guarda el un valor temporal
boolean b = false;//Bandera de cambio de datos


void setup(){
	//Longitud del Array -1, ya que el utimo dato no tendra un dato siguiente con el cual comparar
	ln = sizeof(datos)-1;
}

void loop(){   
	/*
		Codigo para realizar la captura de datos...
	*/
  
	//Ordenando los datos
  
	b = true;//Bandera que indica un cambio en el orden de los datos, inicialmente Verdadera
   
	while(b){//Bucle que se ejecuta mientas ocurra un cambio de posicion en los datos
  
	b=false;//Desactivando la bandera de cambio de datos
    
		//Recorreriendo todo el array
		for(int i=0; i < ln; i++){
			// Comparando el dato siguiente con el actual i
			if(datos[i+1]>datos[i]){        
				b=true;//Hay un cambio de posicion
				tem = datos[i];//Guardando el valor actual
        
				//Intercambiando la posicion de los datos
				datos[i] = datos[i+1];
				datos[i+1] = tem;
			}
		}
    }
  
	//Imprimiendo los datos por el puerto serie
	for(int i=9; i < ln; i++)  Serial.println(datos[i]);
  
}
Compartir