Hace 2 años | Por mr_b a arxiv.org
Publicado hace 2 años por mr_b a arxiv.org

La mayoría de nosotros conocemos bien algoritmos simples de ordenación como el de burbuja. O eso pensamos: ¿alguna vez has tenido la necesidad de escribir el pseudocódigo de este algoritmo solo para darte cuenta de que no es tan sencillo y no lo hiciste bien la primera vez? Se necesita un poco de cuidado para que los índices de bucle comiencen y terminen en los valores correctos y que no estén fuera del rango. ¿No seria bueno si existiera un algoritmo más sencillo que no tuviera esas dificultades? Pues aquí está ese algoritmo.

Comentarios

albandy

Esta es la resolución típica que te hacen los chavales de primero de carrera al hacer algoritmos de ordenación en C, no se que se flipan de que no han encontrado ninguna documentación al respecto.

J

#2 eso pensaba

mecha

#2 Y (casi) nadie hace otra cosa, para eso ya hay bibliotecas que implementan la ordenación de vectores en cualquier lenguaje decente. No me pongo a escribir un QuickSort cada vez que quiero ordenar una lista...

P.D: El primero que hice yo fue el de buscar el valor más pequeño y ponerlo al principio de un nuevo array, luego buscar el segundo más pequeño, el tercero, etc. Muy eficiente no era, no.

Idomeneo

#2 No, el programa de la imagen que pones no se le ocurriría a nadie, ni siquiera a chavales de primero de carrera. Se trata de ordenar de menor a mayor. El programa es completamente contraintuitivo, y el PDF debe demostrar que es correcto a pesar de que parece estar mal.

(O a lo mejor no he entendido tu comentario)

albandy

#5 Soy ingeniero informático desde hace 18 años, he dado clases de repaso a cantidad de chavales que hacen ingeniería informática (que por cierto el nivel ha bajado un huevo) y si digo que es típico es por algo, no por que me salga de la punta del nabo

Idomeneo

#6 Me parece genial, pero me cuesta creer que la gente sea tan burra. Yo diría que el programa típico es el que sale en la página 4:

for i = 1 to n do
for j = i + 1 to n do
if A[i] > A[j] then
swap A[i] and A[j]

Nótese que este programa se entiende, mientras que el otro hay que demostrar que es correcto.

Que no estamos hablando de que se te ocurra el qsort por inspiración divina, solamente que tenga sentido y funcione. El primer programa del artículo funciona pero no tiene ningún sentido.

albandy

#7 Te hacen el primero, con A[i]>A[j], como no les funciona le dan la vuelta y les sale bien, aunque no entiendan porque les funciona o no.

Idomeneo

#8 Vale, eso sí me lo creo porque lo he visto hacer: Tienen un error que no saben explicar e introducen un cambio un poco aleatorio "a ver si se arregla", la mayoría de las veces acaban teniendo dos bugs en vez de uno.

kampanita

edit