Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yoel Alejandro en 4 Marzo 2014, 19:02 pm



Título: Para entender el algoritmo de inserción
Publicado por: Yoel Alejandro en 4 Marzo 2014, 19:02 pm
En esta ocasión quiero compartir un programita divertido que muestra de manera interactiva la ejecución del algoritmo de ordenamiento por inserción. Básicamente va ordenando el arreglo e indicando por pantalla lo que va haciendo: cómo se mueven los elementos y cómo va quedando el vector tras cada paso ....

Un programita amigable y con un propósito bien didáctivo .... enjoy it!!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define N 5
  5.  
  6. int main(void) {
  7.  
  8. int x[N] = {7, 3, 11, 5, 1};
  9. int i, j, k;
  10. int aux;
  11.  
  12. printf("Arreglo original: \n");
  13. for (k = 0; k < N; k++)
  14. printf(" %d", x[k]);
  15. printf("\n");
  16.  
  17. for (i = 1; i < N; i++) {
  18.  
  19. /* buscamos desde 0 hasta i - 1, el primer elemento que sea
  20. * mayor que x[i] */
  21. printf("ubicando %d ...", x[i]);
  22. j = 0;
  23. while (j < i && x[j] <= x[i])
  24. j++;
  25.  
  26. if ( j < i ) {
  27.  
  28. /* insertar x[i] en la posición j, y desplazar los
  29. * restantes elementos hacia la derecha */
  30. printf(" poner en posicion %d\n", j);
  31.  
  32. for (k = 0; k < N; k++)
  33. printf(" %d", x[k]);
  34. printf("  -> ");
  35.  
  36. aux = x[i];
  37. for (k = i; k > j; k--)
  38. x[k] = x[k-1];
  39. x[j] = aux;
  40.  
  41. for (k = 0; k < N; k++)
  42. printf(" %d", x[k]);
  43. printf("\n");
  44. }
  45. else
  46. printf(" sin cambios\n");
  47. }
  48. printf("El arreglo final ordenado es:\n");
  49. for (i = 0; i < N; i++)
  50. printf(" %d", x[i]);
  51. printf("\n");
  52.  
  53. return 0;
  54. }