Ordenar un array de manera que queden del más cercano a M hasta el más alejado

Iniciado por maritere22, 7 Abril 2013, 14:48 PM

0 Miembros y 2 Visitantes están viendo este tema.

maritere22

Hola! Necesito ayuda... tengo que hacer un programa, y lo primero de todo es ordenar un array, pero no tengo idea de cómo hacerlo...

Me dan un array N con números enteros ordenados de menor a mayor, y un número M.
Se trata de reordenar el array de manera que queden ordenados del más cercano a M hasta el más alejado.


Por ejemplo:

Tengo un array N[]={0,2,3,5,7,10}
Y un número M=3;
Al final quedaría de esta forma: N[]={3,2,5,0,7,10}

Gracias de antemano!! ;)

85

claro, vos estás diciendo los más cercanos con respecto a la posición, por eso 2,5,0, etc se me ocurren varias maneras, una puede ser obtener la diferencia de cada número con M y ordenar un vector según las diferencias de menor a mayor. Usarías un valor absoluto para las diferencias.
hay otras formas que se me ocurren, fijate esa
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

maritere22

Sí, a mi se me ocurrió la misma forma, pero no sé cómo implementarla, por eso lo pregunté aquí

rir3760

Al utilizar un algoritmo sencillo comparas dos elementos para saber cual es mayor, por ejemplo utilizando BubbleSort:
if (elem[i] > elem[i + 1]){

   /* Intercambio */
   
}


La única modificación que debes hacer es la ya indicada por 85: en lugar de comparar los valores directamente (como en el ejemplo anterior) comparas las diferencias entre los valores y el referente (3 en tu caso). Si suena complicado te aseguro no lo es, solo debes utilizar la función abs (prototipo en <stdlib.h>) y una resta. Siguiendo el ejemplo anterior la comparación cambia a:
if (abs(elem[i] - M) > abs(elem[i + 1] - M)){

   /* Intercambio */
   
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language