Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pacosn1111 en 2 Junio 2015, 17:16 pm



Título: problema con funcion que ordena array de tipo int
Publicado por: pacosn1111 en 2 Junio 2015, 17:16 pm
Hola a tod@s, me propuse escribir un programa que ordenara un array en otro array, he intentado ya de todo pero me sigue dando el mismo fallo, en vez de ordenar el array correctamente me genera un "222222222".

El código fuente es este:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void ordenar_array(int [], int []);
  5. int comprobar_repetir_vector(int, int []);
  6.  
  7. int main() {
  8.  
  9.  int num_array[]={5, 8, 7, 3, 1, 6, 2, 4, 9};
  10.  int num_result[9];
  11.  ordenar_array(num_array, num_result);
  12.  
  13.  for(int x=0; x<9; x++) {
  14.  
  15.    printf("%d", num_result[x]);
  16.  
  17.  }
  18.  
  19. }
  20.  
  21. void ordenar_array(int num_array[], int num_result[]) {
  22.  
  23. int aux=num_array[0];
  24. int len=sizeof(num_array);
  25.  
  26.  for(int x=0;len+1>x;x++) {
  27.  
  28.    for(int y=0;len+1>y;y++) {
  29.  
  30.      if (num_array[y]<aux && comprobar_repetir_vector(num_array[y], num_result)==0) {
  31.  
  32.  
  33.        aux=num_array[y];
  34.  
  35.      }
  36.  
  37.    }
  38.  
  39.  num_result[x]=aux;
  40.  
  41.  }
  42.  
  43. }
  44.  
  45. int comprobar_repetir_vector(int numero, int vector[]){
  46.  
  47. int x;
  48. int len=sizeof(vector);
  49. for(x=0; x<len+1;x++) {
  50.  
  51. if(numero==vector[x]) {
  52.  
  53. return 1;
  54.  
  55. }
  56. }
  57. return 0;
  58. }
  59.  

Gracias de antemano.

Saludos.


Título: Re: problema con funcion que ordena array de tipo int
Publicado por: DarK_FirefoX en 2 Junio 2015, 19:00 pm
No entiendo para que te complicas, puedes mejor hacer una copia el array original y ordenar esta copia utilizando cualquier algoritmo de ordenación.

Salu2s


Título: Re: problema con funcion que ordena array de tipo int
Publicado por: pacosn1111 en 2 Junio 2015, 20:38 pm
No entiendo para que te complicas, puedes mejor hacer una copia el array original y ordenar esta copia utilizando cualquier algoritmo de ordenación.

Salu2s

Ya así es mucho más facil pero quería practicar algoritmia hasta que me he quedado atascado un buen rato aquí.


Título: Re: problema con funcion que ordena array de tipo int
Publicado por: pacosn1111 en 3 Junio 2015, 10:00 am
Por favor ayuda, tengo mucha curiosidad por resolver el problema.


Título: Re: problema con funcion que ordena array de tipo int
Publicado por: rir3760 en 3 Junio 2015, 17:17 pm
tengo mucha curiosidad por resolver el problema.
Al parecer tratas de implementar el algoritmo de ordenacion por selección o InsertSort pero me temo que hay bastantes errores, algunos de estos son:

* No descartas el menor en cada iteración.
* Ignoras los repetidos al ordenar cuando, en el mejor escenario, deberías eliminar los repetidos después del elemento (lo mas sencillo es simplemente ordenar la lista y solo entonces ignorar repetidos).
* En todos los bucles menos el primero tienes una iteración de mas, por ejemplo:
Código
  1. for (int x = 0; len + 1 > x; x++) ...
Hay que eliminar el "+ 1" de todos esos bucles. Bueno, en realidad hay que cambiar de forma significativa los bucles acorde a la forma correcta del algoritmo.
* En las dos ultimas funciones tratas de calcular el numero de elementos en el array mediante sizeof, esto no es posible ya que toda función declarada en la forma:
Código
  1. void ordenar_array(int num_array[], int num_result[]);
Se procesa como si la declaracion fuera:
Código
  1. void ordenar_array(int *num_array, int *num_result);
En su lugar modifica las funciones para que acepten un argumento adicional, por supuesto este es el numero de elementos del array.

Una explicación a detalle pero en ingles del algoritmo es The Selection Sort (http://courses.cs.vt.edu/~csonline/Algorithms/Lessons/SelectionSort/index.html), una mas cortesía de Wikipedia: Selection sort (http://en.wikipedia.org/wiki/Selection_sort)

Un saludo


Título: Re: problema con funcion que ordena array de tipo int
Publicado por: pacosn1111 en 4 Junio 2015, 09:06 am
Al parecer tratas de implementar el algoritmo de ordenacion por selección o InsertSort pero me temo que hay bastantes errores, algunos de estos son:

* No descartas el menor en cada iteración.
* Ignoras los repetidos al ordenar cuando, en el mejor escenario, deberías eliminar los repetidos después del elemento (lo mas sencillo es simplemente ordenar la lista y solo entonces ignorar repetidos).
* En todos los bucles menos el primero tienes una iteración de mas, por ejemplo:
Código
  1. for (int x = 0; len + 1 > x; x++) ...
Hay que eliminar el "+ 1" de todos esos bucles. Bueno, en realidad hay que cambiar de forma significativa los bucles acorde a la forma correcta del algoritmo.
* En las dos ultimas funciones tratas de calcular el numero de elementos en el array mediante sizeof, esto no es posible ya que toda función declarada en la forma:
Código
  1. void ordenar_array(int num_array[], int num_result[]);
Se procesa como si la declaracion fuera:
Código
  1. void ordenar_array(int *num_array, int *num_result);
En su lugar modifica las funciones para que acepten un argumento adicional, por supuesto este es el numero de elementos del array.

Una explicación a detalle pero en ingles del algoritmo es The Selection Sort (http://courses.cs.vt.edu/~csonline/Algorithms/Lessons/SelectionSort/index.html), una mas cortesía de Wikipedia: Selection sort (http://en.wikipedia.org/wiki/Selection_sort)

Un saludo

Gracias, me ha servido de mucho :)