Código Python:
Ver originalimport random
lista_aleatoria = []
longitud = 100
def quicksort(datos, primero, ultimo):
datos = datos[:]
i = primero
j = ultimo
pivote = (datos[primero] + datos[ultimo]) / 2
while i < j:
while datos[i] < pivote: i+=1
while datos[j] > pivote: j-=1
if i <= j:
aux = datos[i]
datos[i] = datos[j]
datos[j] = aux
i+=1
j-=1
if primero < j: datos = quicksort(datos, primero, j)
if ultimo > i: datos = quicksort(datos, i, ultimo)
return datos
for i in range(longitud-1):
j = longitud - i
lista_aleatoria.append(random.randint(1, 100))
lista_ordenada = quicksort(lista_aleatoria,0,len(lista_aleatoria)-1)
print lista_aleatoria
print lista_ordenada
Lo que pasa es que estas haciendo operaciones *IN-PLACE*
Ejemplo:
Código Python:
Ver originallista = [1, 2, 3]
def f(dato):
dato[2] = 4 #Esto es una operacion *IN-PLACE*
return dato
lista2 = f(lista) #Ahora lista y lista2 son: [1, 2, 4]
#Y de hecho son la misma lista
#En cambio
Código Python:
Ver originalnumero = 5
def f(dato):
dato += 1 #Esto no es una operacion *IN-PLACE*
return dato
numero2 = f(numero)
print numero #numero es 5
print numero2 #numero es 6
Una regla simple para saber si puedo o no hacer operaciones IN-PLACE es saber si el tipo de dato es mutable o no.
En el caso de los enteros no es mutable, pero en caso de las listas y diccionarios si lo son. Así que la mayoría de las operaciones que hagas con tipos de datos mutables son IN-PLACE.
Cuando son tipos de datos mutables cualquier operación que hagas con ellos regresan una copia. Si son mutables la mayoría de las operaciones *IN-PLACE* por ejemplo.
Código Python:
Ver originallista = [1, 2, 0, 2, -1, 7]
lista.sort() #Esto no devuelve una lista ordenada, si no que lo hace *IN-PLACE*
print lista