ordenar números...

Buenas otra vez…
Estoy atascado… otra vez…

Una de las partes finales de mi programa, me genera una serie de datos… relacionados entre si de dos en dos… y tengo que ordenarlos de mayor a menor… es decir…

Ejemplo…

dato 1 Dato2
25 ----- 80345
23 ----- 81435
21 ----- 82246
23 ----- 91435
21 ----- 80856
25 ----- 82724

En primer lugar hay que ordenar la columna de dato 1, de mayor a menor… y en caso de repetirse hay que usar el dato dos de menor valor…

es decir…

dato 1 dato 2
25 ----- 80345
25 ----- 82724
23 ----- 81435
23 ----- 91435
21 ----- 80856
21 ----- 82246

tengo guardados los datos guardados de la siguiente manera…
dato1_1, dato1_2 … dato1_6
dato2_1, dato2_2 … dato2_6

Alguna idea???

gracias…

Utilizando un if para compararlos y un for para ir almacenando los resultados en un array.

pues lo siento....

no consigo hacerlo... llevo 2 horas probando y nada... con dos valores es fácil, pero con mas, no lo consigo....

algún ejemplo por ahi, para echarle un vistazo?...

Hola,
En C hay hay función para ordenar de forma binaria: qsort()
Puedes definir una estructura con los dos números, y definir una función de comparación. Para recordar cosas que casi las tenía olvidadas, he hecho un ejercicio con tu problema, reducido a 5 números. Espero que te sirva.

struct numeros
{
   int num1;
   int num2;
} numeros[5];


int compara_numeros( const void *a, const void *b)
{
    struct numeros *n1, *n2;
   n1 = (struct numeros *)a; 
   n2 = (struct numeros *)b;
   if(n1->num1 > n2->num1) return 1;
   if(n1->num1 < n2->num1) return -1; 
   if(n1->num2 > n2->num2) return 1;   
   if(n1->num2 < n2->num2) return -1;
   return 0;
 };
 
void setup() 
{
   Serial.begin(9600); 
}


int n;

void loop() 
{

   numeros[0].num1 = 33 ;  numeros[0].num2 = 31 ;
   numeros[1].num1 = 4 ;   numeros[1].num2 = 3 ;
   numeros[2].num1 = 111 ; numeros[2].num2 = 222 ;
   numeros[3].num1 = 1 ;   numeros[3].num2 = 3 ;
   numeros[4].num1 = 1 ;   numeros[4].num2 = 2 ;
    
   qsort((void *)numeros, 5, sizeof(numeros[0]), compara_numeros);

   for(n=0;n<5;n++)
   {
       Serial.print(numeros[n].num1); Serial.print("  ");
       Serial.println(numeros[n].num2);
   }
   delay(5555);
}

MUCHISIMAS GRACIAS!!!

Funciona perfecto, era justo lo que necesitaba…

No entiendo muy bien como realiza la comparación de los datos (si podrías reescribirlo comentando lo agradecería) pero lo he adaptado y me va de lujo…

Gracias otra vez…

Por dios!. :wink:
Hace al menos 7 años que programo en C y siempre tuve que hacer mis propias implementaciones del quicksort()… Nunca supe que habia una funcion generica!. jajaja

Gracias!.