Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DanielPy en 3 Diciembre 2013, 21:03 pm



Título: ¿Una manera distinta de ordenar arreglos/vectores.-?
Publicado por: DanielPy en 3 Diciembre 2013, 21:03 pm
Hola amigos.
Estoy en un verdadero inconveniente con esto de ordenar un arreglo, no pretendo redescubrir la rueda, simplemente estoy practicando y hace mucho tiempo se me antojó esta manera de ordenar pero no logro que funcione.-
Con respecto a la cantidad de elementos del arreglo y hacerlo en una función luego lo arreglo, el tema es que alguna mente iluminada me diga dónde está el error.-
Debo aclarar que en algunos casos funciona, me parece que el error se produce cuando el menor/mayor arrancan muy cerca de los extremos.-   

Código
  1. #include <stdio.h>
  2.  
  3. void mostrar(int numeros[]);
  4.  
  5.  
  6. int main(void){
  7. int numeros[] = {77,58,7,19,62,99,44,49,15,33};
  8. int menor=9999, mayor=0, pos_men=0, pos_may=0, men_cam=0, may_cam=0,i, j=0, m=9;
  9.  
  10. printf("\n\n");
  11. mostrar(numeros);
  12. printf("\n\n");
  13.  
  14. for(i=0; i<5; i++){
  15. men_cam = numeros[i];
  16. may_cam = numeros[m];
  17. for(j=i; j<=m; j++){
  18. if(numeros[j] < menor){
  19. menor = numeros[j];
  20. pos_men = j;
  21. }
  22. if(numeros[j] > mayor){
  23. mayor = numeros[j];
  24. pos_may = j;
  25. }
  26. }
  27. numeros[i] = menor;
  28. numeros[pos_men] = men_cam;
  29.  
  30. numeros[m] = mayor;
  31. numeros[pos_may] = may_cam;
  32. mostrar(numeros);
  33. printf("--> Menor=%d [%d] --- Mayor=%d [%d]", menor, pos_men+1, mayor, pos_may+1);
  34. menor=9999;
  35. mayor=0;
  36. m--;
  37. }
  38. printf("\n\n");
  39. mostrar(numeros);
  40.  
  41. return 0;
  42. }
  43.  
  44.  
  45. void mostrar(int numeros[]){
  46. int t;
  47. printf("\n");
  48. for(t=0; t<10; t++){
  49. printf(" %3d ", numeros[t]);
  50. }
  51. }
  52.  

(http://i42.tinypic.com/bgpik0.jpg)

Bueno espero ayuda.-
Saludos.
Daniel
(http://i39.tinypic.com/euet78.jpg)