problema con funcion que ordena array de tipo int

Iniciado por pacosn1111, 2 Junio 2015, 17:16 PM

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

pacosn1111

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:


#include <stdlib.h>
#include <stdio.h>

void ordenar_array(int [], int []);
int comprobar_repetir_vector(int, int []);

int main() {

  int num_array[]={5, 8, 7, 3, 1, 6, 2, 4, 9};
  int num_result[9];
  ordenar_array(num_array, num_result);

  for(int x=0; x<9; x++) {

    printf("%d", num_result[x]);

  }

}

void ordenar_array(int num_array[], int num_result[]) {

int aux=num_array[0];
int len=sizeof(num_array);

  for(int x=0;len+1>x;x++) {

    for(int y=0;len+1>y;y++) {

      if (num_array[y]<aux && comprobar_repetir_vector(num_array[y], num_result)==0) {


        aux=num_array[y];

      }

    }

  num_result[x]=aux;

  }

}

int comprobar_repetir_vector(int numero, int vector[]){

int x;
int len=sizeof(vector);
for(x=0; x<len+1;x++) {

if(numero==vector[x]) {

return 1;

}
}
return 0;
}


Gracias de antemano.

Saludos.

DarK_FirefoX

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

pacosn1111

Cita de: 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

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

pacosn1111

Por favor ayuda, tengo mucha curiosidad por resolver el problema.

rir3760

Cita de: pacosn1111 en  3 Junio 2015, 10:00 AMtengo 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:
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:
void ordenar_array(int num_array[], int num_result[]);
Se procesa como si la declaracion fuera:
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, una mas cortesía de Wikipedia: Selection sort

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

pacosn1111

Cita de: rir3760 en  3 Junio 2015, 17:17 PM
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:
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:
void ordenar_array(int num_array[], int num_result[]);
Se procesa como si la declaracion fuera:
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, una mas cortesía de Wikipedia: Selection sort

Un saludo

Gracias, me ha servido de mucho :)