Librería para Arduino que aplica el algoritmo QuickSort para ordenar un array en Arduino.
Más información https://www.luisllamas.es/libreria-arduino-quicksort/
La librería dispone de dos métodos estáticos para la ordenación de vectores. No es necesario, por tanto, instanciar un objeto.
La librería incorpora dos métodos estáticos para el calculo de QuickSort ascendente y descendente. Se usan templates para que funcionen con distintos tipos de variables (int, long, float…). La librería incorpora dos ejemplos, uno para int y otro para float.
Para la ordenación en sentido ascendente usaríamos el método SortAscending.
QuickSort<int>::SortAscending(items, initItem, numItems);
Mientras que para la ordenación en sentido descendente usaríamos el método SortDescending.
QuickSort<int>::SortDescending(items, initItem, numItems);
La librería QuickSort incluye los siguientes ejemplos para ilustrar su uso.
- QuickSortInt: Ejemplo de uso para variables integer.
#include "QuickSortLib.h"
int values100[] = { 3, 53, 70, 56, 18, 85, 27, 14, 37, 94, 9, 55, 40, 60, 52, 61, 15, 65, 13, 8, 57, 97, 69, 4, 35, 82, 22, 73, 59, 68, 78, 24, 21, 36, 71, 80, 74, 39, 17, 12, 29, 76, 49, 51, 30, 90, 88, 2, 84, 50, 62, 28, 77, 43, 5, 16, 58, 26, 32, 34, 1, 75, 66, 95, 38, 89, 67, 87, 100, 54, 92, 81, 25, 83, 46, 33, 23, 45, 96, 99, 79, 48, 11, 31, 7, 6, 19, 91, 93, 44, 47, 98, 86, 41, 63, 20, 72, 10, 42, 64 };
size_t values100Length = sizeof(values100) / sizeof(values100[0]);
void printArray(int* x, size_t length)
{
for (size_t iCount = 0; iCount < length; iCount++)
{
Serial.print(x[iCount]);
Serial.print(',');
}
}
void setup()
{
Serial.begin(115200);
Serial.println("Ordenando 100 integers");
unsigned long timeCount = micros();
QuickSort<int>::SortAscending(values100, 0, values100Length - 1);
timeCount = micros() - timeCount;
printArray(values100, values100Length);
Serial.println();
Serial.print(timeCount);
Serial.println("us");
}
void loop()
{
}
- QuickSortFloat: Ejemplo de uso para variables float.
#include "QuickSortLib.h"
float values100[] = { 3.0, 53.0, 70.0, 56.0, 18.0, 85.0, 27.0, 14.0, 37.0, 94.0, 9.0, 55.0, 40.0, 60.0, 52.0, 61.0, 15.0, 65.0, 13.0, 8.0, 57.0, 97.0, 69.0, 4.0, 35.0, 82.0, 22.0, 73.0, 59.0, 68.0, 78.0, 24.0, 21.0, 36.0, 71.0, 80.0, 74.0, 39.0, 17.0, 12.0, 29.0, 76.0, 49.0, 51.0, 30.0, 90.0, 88.0, 2.0, 84.0, 50.0, 62.0, 28.0, 77.0, 43.0, 5.0, 16.0, 58.0, 26.0, 32.0, 34.0, 1.0, 75.0, 66.0, 95.0, 38.0, 89.0, 67.0, 87.0, 100.0, 54.0, 92.0, 81.0, 25.0, 83.0, 46.0, 33.0, 23.0, 45.0, 96.0, 99.0, 79.0, 48.0, 11.0, 31.0, 7.0, 6.0, 19.0, 91.0, 93.0, 44.0, 47.0, 98.0, 86.0, 41.0, 63.0, 20.0, 72.0, 10.0, 42.0, 64.0 };
size_t values100Length = sizeof(values100) / sizeof(values100[0]);
void printArray(float* x, size_t length)
{
for (size_t iCount = 0; iCount < length; iCount++)
{
Serial.print(x[iCount]);
Serial.print(',');
}
}
void setup()
{
Serial.begin(115200);
Serial.println("Ordenando 100 integers");
unsigned long timeCount = micros();
QuickSort<float>::SortAscending(values100, 0, values100Length - 1);
timeCount = micros() - timeCount;
printArray(values100, values100Length);
Serial.println();
Serial.print(timeCount);
Serial.println("us");
}
void loop()
{
}