duda algoritmo

Iniciado por Beginner Web, 8 Junio 2019, 10:42 AM

0 Miembros y 1 Visitante están viendo este tema.

Beginner Web

Bueno  queria saber si puedo resumir mas el algoritmo quick sort de 27 lineas para que no sea tan largo y hacerlo similar al de bogosort pero sin trampa, el codigo de quicksort me lo se de memoria el de bogosort tambien  ;-)
7w7

K-YreX

Hay infinidad de implementaciones para un mismo algoritmo por lo que puedes poner tu implementación y así es más fácil decirte si puedes simplificarlo más. La otra opción es esperar que alguien lo tenga más simplificado y te lo mande...
Y no sé a qué te refieres con "pero sin trampa". He supuesto que es a no poner varias instrucciones en una línea para reducir el número de líneas, motivo por el cual no es muy bueno medir la simplificación de un código por su número de líneas. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Serapis

Tal como te señala YreX-DwX, un algoritmo no se puede medir por su número de líneas.
A menudo un algoritmo que te funciona muy bien y es muy escueto, le acabas añadiendo el doble de líneas y luego resulta mucho más rápido.

En general el hecho de añadir alguna que otra línea, por ejemplo al asignar valores, puede que su ejecución solo sea pocas veces, y a cambio ahorre muchas ejecuciones dentro de un bucle.

Más bien considera algoritmos de líneas breves (aunque ineficiente) como solución para problemas pequeños... Por ejemplo el ordenamiento de burbuja es el más lento, pero para ordenar pequeñas colecciones de hasta unas decenas (no más de 50 elementos) todavía planta cara a los más eficientes.
Justo cuanto más cantidad de elementos deban ser ordenados tanto más importante se hace la eficiencia del algoritmo usado.

Por cierto el 'bogosort' (más bien bobo-sort), bajo mi punto de vista no es un algoritmo, de ordenamiento ni debiera aparecer por parte alguna.

Pon el código que tienes y se ve de hacerlo más eficiente...

Beginner Web

#3
lo se bebes, cuando decia sin trampa me referia justamente a eso, a no escribir todo en una sola linea de codigo, mi intencion es reducir los pasos y de esa manera hacerlo mas compacto porque todo se puede compactar tranquilamente solo que con este algoritmo no me sale  :laugh:

Código (cpp) [Seleccionar]
void quick_sort(arreglo &a, int izq, int der)
{
int i, j, pivote, aux;
i=izq;
j=der;
pivote=a[(izq+der)/2];
while(i<=j){
while(a[i]<pivote)
i++;
while(a[j]>pivote)
j--;
if(i<=j){
aux=a[i];
a[i]=a[j];
a[j]=aux;
i++;
j--;
}
}
if(izq<j)
quick_sort(a, izq, j);
if(i<der)
quick_sort(a, i, der);
}


7w7

K-YreX

Si quieres quitar líneas claro que puedes, a costa de perder legibilidad:
  • Las líneas 4, 5 y 6 las puedes poner junto a las declaraciones. (3 líneas menos)
  • Los <if> y <while> con una sola sentencia dentro, puedes quitar las llaves. (4 líneas menos)
  • Puedes cambiar un poco los incrementos. (8 líneas menos contando las 4 líneas menos anteriores)

    Ganancias en eficiencia? Ninguna
    Pérdidas en legibilidad? Muchas
    :rolleyes: :rolleyes: :rolleyes: :rolleyes:
    Si quieres ganar un poco en eficiencia lo único que te diría es que los incrementos y decrementos los hagas en prefijo <++i> es ligeramente mejor que <i++>. Pero tampoco creas que te van a mejorar los tiempos de ordenación por hacer eso.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;