Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: maritere22 en 7 Abril 2013, 14:48 pm



Título: Ordenar un array de manera que queden del más cercano a M hasta el más alejado
Publicado por: maritere22 en 7 Abril 2013, 14:48 pm
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!! ;)


Título: Re: Ordenar un array de manera que queden del más cercano a M hasta el más alejado
Publicado por: 85 en 7 Abril 2013, 15:59 pm
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


Título: Re: Ordenar un array de manera que queden del más cercano a M hasta el más alejado
Publicado por: maritere22 en 10 Abril 2013, 09:24 am
Sí, a mi se me ocurrió la misma forma, pero no sé cómo implementarla, por eso lo pregunté aquí


Título: Re: Ordenar un array de manera que queden del más cercano a M hasta el más alejado
Publicado por: rir3760 en 10 Abril 2013, 17:17 pm
Al utilizar un algoritmo sencillo comparas dos elementos para saber cual es mayor, por ejemplo utilizando BubbleSort:
Código
  1. if (elem[i] > elem[i + 1]){
  2.  
  3.   /* Intercambio */
  4.  
  5. }

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:
Código
  1. if (abs(elem[i] - M) > abs(elem[i + 1] - M)){
  2.  
  3.   /* Intercambio */
  4.  
  5. }

Un saludo