elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con funcion que ordena array de tipo int
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con funcion que ordena array de tipo int  (Leído 2,634 veces)
pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
problema con funcion que ordena array de tipo int
« 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.


En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: problema con funcion que ordena array de tipo int
« Respuesta #1 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


En línea

pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: problema con funcion que ordena array de tipo int
« Respuesta #2 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í.
En línea

pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: problema con funcion que ordena array de tipo int
« Respuesta #3 en: 3 Junio 2015, 10:00 am »

Por favor ayuda, tengo mucha curiosidad por resolver el problema.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con funcion que ordena array de tipo int
« Respuesta #4 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, una mas cortesía de Wikipedia: Selection sort

Un saludo
En línea

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

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: problema con funcion que ordena array de tipo int
« Respuesta #5 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, una mas cortesía de Wikipedia: Selection sort

Un saludo

Gracias, me ha servido de mucho :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array tipo C (es posible en VB?)
Programación Visual Basic
katanaia 6 2,356 Último mensaje 31 Julio 2008, 17:04 pm
por katanaia
Problema con función de array de 2 dimensiones
Programación C/C++
ZedGe 1 2,053 Último mensaje 26 Mayo 2012, 18:58 pm
por ZedGe
Problema con funcion sin tipo en C « 1 2 3 »
Programación C/C++
the_jocker 24 12,566 Último mensaje 1 Julio 2012, 03:58 am
por Foxy Rider
Como saber el tamaño de un array de tipo int
Programación C/C++
Blaster 4 49,740 Último mensaje 8 Noviembre 2012, 19:31 pm
por Blaster
Intentando crear un array de tipo Lista en c++
Programación C/C++
SXF 2 1,770 Último mensaje 1 Diciembre 2012, 20:29 pm
por SXF
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines