Publicidad:
La Coctelera

Programming Ape

Historias de un simio que programa

20 Septiembre 2005

Burbujas

Marco:

Después de toda una tarde peleando con la implementación de un algoritmo de ordenación de listas (bubble sort), con la única salvedad que es una lista de estructuras que tienen un puntero que apunta a la siguiente estructura, el sujeto se fue a casa sin haberlo conseguido implementar bien, había algo que al sujeto se le escapaba, sin embargo el algoritmo parecía estar bien (y tan bien que debía estar, ya que el sujeto estudió ese algoritmo en el primer año de carrera y en internet hay varios algoritmos de burbuja diferentes)

Al salir del despacho, el sujeto no dejó de darle vueltas al problema y en qué estaba metiendo la pata hasta que llegó al taller, donde el problema le pasó a un seguno plano cuando el mecánico le digo que el coche perdía líquido en el circuito estanco de la dirección asistida y que en un par de días tendría un recambio del tubo que su coche tenía dañado, mientras tanto rellenaba el líquido del circuito para que pueda ir tirando.

Una vez en casa y estando el sujeto en el sofá sin otra ocupación que buscar bolitas de roña en el ombligo le sobrevino una especie de conocimiento absoluto sobre los punteros y con éste el conocimiento del fallo tan ansiosamente buscado.

Raudo y veloz, cual murciélago indú que come cardillo y kiwi, el sujeto abre el portatil y en menos de 15 minutos tiene implementado en C una función que ordena el tipo de listas con las que está trabajando.

Conclusión:

El cerebro humano trabaja con un sistema operativo capaz de trabajar con threads y lograr una multitaréa real que ya la quisieran para sí los sistemas operativos actuales. No solo eso, sino que trabajando en modo subconsciente (o backgroud) trabaja mejor, porque las distracciones del estado consciente (o foreground) no parecen afectarlo en absoluto pudiendo centrarse únicamente en el problema dado, desempolvando conocimientos que el sujeto ya poseía, pero que por tener el foreground ocupado en muchas otras cosas no es capaz de encontrar.

Resultado:

 swapped = TRUE;

 while (swapped) {

  swapped = FALSE;

  for (cont = 0; cont < (max-1); cont++) {

   int idx;

   a = Lista;

   for (idx = 0; idx <= cont; idx++) {

    if (idx == 0) {

     ant = NULL;

     a = Lista;

    } else {

     ant = a;

     a = a->sig;

    }

   }

   b = a->sig;

   switch(campo) {

    case 1:

     strcpy(aval, a->company);

     strcpy(bval, b->company);

     break;

    case 2:

     strcpy(aval, a->period);

     strcpy(bval, b->period);

     break;

    default:

     strcpy(aval, a->db_name);

     strcpy(bval, b->db_name);

  }

  if (strcmp(aval, bval) > 0) {

   // se intercambian las posiciones

   swapped = TRUE;

   a->sig = b->sig;

   b->sig = a;

    if (ant == NULL) {

    Lista = b;

   } else {

    ant->sig = b;

   }

  }

 }

servido por guerrero 1 comentario compártelo

1 comentario · Escribe aquí tu comentario

Mars Attacks

Mars Attacks dijo

Me alegro que al final hayas podido con eso. Ahora cuidado con el coche...

20 Septiembre 2005 | 01:40 PM

Escribe tu comentario


Sobre mí

Simio Programador

El gran hermano nos vigila:

Web site counter

Fotos

guerrero todavía no ha subido ninguna foto.

¡Anímale a hacerlo!

Buscar

suscríbete

Selecciona el agregador que utilices para suscribirte a este blog (también puedes obtener la URL de los feeds):

¿Qué es esto?

Crea tu blog gratis en La Coctelera