def ordenar(lista, cmp = (lambda x, y: (x > y) - (x < y))):
izquierda = []
derecha = []
centro = []
if len(lista) > 1:
pivote = lista[0]
for i in lista:
compare = cmp(i, pivote)
if compare == -1:
izquierda.append(i)
elif compare == 1:
derecha.append(i)
elif compare == 0:
centro.append(i)
return ordenar(lista, cmp)
else:
return lista
No me quedó del todo claro, como realizar la llamada a la comparacion, es decir, comparacion = cmp(i, pivote) y tampoco la llamada recursiva, porque no puedo devolver la lista, ya que lo que debo devolver es la lista ordenada por el atributo value, lo que viene hacer los (elementos de la izquierda) + (elementos del centro) + (elementos de la derecha)
You can just check if the variable has a truthy value or not. That means
if( value ) {
}
will evaluate to true if value is not:
null
undefined
NaN
empty string ("")
0
false
The above list represents all possible falsy values in ECMA-/Javascript. Find it in the specification at the ToBoolea...
@abulafia He modificado el código y le añadí a cmp pasado como parámetro el .value y traté de construir una nueva lista para retornarlo en la llamada recursiva con la forma en la que esperaba que se mostrase la lista
el centro ya estaría ordenado, de todas formas, porque solo contendría elementos iguales al pivote
asi que me ahorro la llamada recursiva para ese trozo
esa función (salvo errores) te sirve para ordenar tanto listas "normales" (por ejemplo, de enteros) como de cualquier otra cosa, si proporcionas la lambda en cmd que compare elementos