1

Algoritmo de ordenamiento rapido en 2 lineas de codigo

Antes que nada primero ya debes haber hecho este curso ademas de tener un vasto conocimiento de python, saber usar la libreria random y saber que es un algoritmo.
Quick sort algorithm es un algoritmo bastante eficiente el cual nos ayuda a ordenar listas o arreglos desordenados, en esta oportunidad lo haremos en dos lineas de codigo y usaremos recursividad, es decir, usar una funcion dentro de otra funcion.
0-Digamos que tenemos esta lista: lista = [1,1.5,7,5,0,4,2,6,8]
1-Primero lo que se hace es elegir un elemento al azar en nuestra lista al cual le llamaremos pivote, y colocaremos los elementos menores a en una sublista a su izquierda y los elementos mayores en una sublista a su derecha, digamos que escogemos el 5 como pivote, entonces el 5 ya esta en su lugar y no lo debemos mover:
1 1.5 0 2 4 [5] 6 8 7
2-Ahora haremos lo mismo con ambas sublistas, escogemos como pivote de la primera sublista el 0 y el pivote de la segunda sublista el 6:
[0] 2 4 1 1.5 [5] [6] 8 7
Luego escogemos el 4 y el 7:
[0] 2 1 1.5 [4] [5] [6] [7] 8
Luego el 2 y en la otra sublista no hacemos nada porque solo nos queda un numero(tambien cuando no hay numeros) y eso quiere decir que ya esta ordenada,
[0] 1 1.5 [2] [4] [5] [6] [7] [8]
Luego el 1:
[0] [1] [1.5] [2] [4] [5] [6] [7] [8]
Y listo ya esta ordenada
Ahora al implementarlo en un algoritmo de dos lineas lo que haremos sera definir una funcion en la cual lo que hacemos es elegir un pivote el cual estara en la mitad de nuestra lista, formar nuestras dos sublistas(los numeros menores a la izquierda y los mayores a la derecha), y usar la misma funcion de forma recursiva para estas dos sublistas hasta que nos quede un elemento o ninguno, lo cual quiere decir que esta ordenada, para ello usaremos una condicion.

import random
deford(lista):return lista if (len(lista) <= 1) else (ord([lista[i] for i in range(len(lista)) if (lista[i]<lista[len(lista)//2] and i!=len(lista)//2)])+[lista[len(lista)//2]]+ord([lista[i] for i in range(len(lista)) if (lista[i]>=lista[len(lista)//2] and i!=len(lista)//2)])) 

print(ord([0,1,3,2,5,4,100,0.1,20,6,7,10,2,3,100,2,45,1,1,1,1,1,1,1,0.005,-1]))



Output:
[-1, 0, 0.005, 0.1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 10, 20, 45, 100, 100]

Escribe tu comentario
+ 2
1

¿Y de que me sirven todos esos 1? ¿Para qué sirve este programa? No entendí.

1
12231Puntos

Los sorting algorithms son algoritmos para ordenar listas de numeros en desorden, en los cursos no explicaron este algoritmo por eso lo puse aca.El codigo esta complicado de entender ya que el objetivo era hacerlo en 2 lineas de codigo.