Hacer un programa para organizar una lista de números en orden descendente sin algoritmos de clasificación incorporados

Me dijeron que hiciera esto como tarea. Hasta ahora hice lo siguiente:

a = raw_input("Please enter a number:")
b = a.split()
for c in range(len(b)):
    b[c] = int(b[c])

n=[]
big=b[0]

while b != []:
    for i in range(len(b)):
        if big < b[i]:
            big!=b[i]
    n=n+[big]
    b.remove(big)

print n

He aquí un ejemplo:

459113

Y se supone que la salida es:

954331

El desafío es no usar algoritmos de clasificación, lo cual es difícil para mí porque no sé cómo evitarlo.

La base de ese programa es de:

a = raw_input("Please enter a number:")
b = a.split() 
for c in range(len(b)):
  b[c] = int(b[c])

n=[]
small=b[0] while b != []:
    small=b[0]
    for i in range(len(b)):
        if small > b[i]:
            small=b[i]
    n=n+[small]
    b.remove(small)

print n

preguntado el 10 de marzo de 12 a las 08:03

Er... ordenar los números en orden is un algoritmo de clasificación. -

¿Qué quiere decir con "no usar algoritmos de clasificación"? Por definición, cualquier algoritmo que coloque las cosas en orden ordenado es un algoritmo de clasificación. -

Quiero decir que no puedo usar algoritmos de clasificación incorporados en python. -

que algoritmo de clasificación ¿Estás tratando de implementar? -

¿No deberían la entrada y la salida contener los mismos dígitos? -

3 Respuestas

Podrías probar algo como esto:

a = raw_input("Please enter a number:")
b = map(int, a)
n=[]
while b:
    smallest = min(b)
    n.append(smallest)
    b.remove(smallest)
print
print ''.join(map(str, n))

Véalo funcionando en línea: idea

Es el mismo algoritmo que su código existente, pero he solucionado una serie de errores. Tenga en cuenta que este no es un algoritmo eficiente. Funciona en O(n2) hora. Usando el incorporado sorted función podría alcanzar el tiempo O(n log(n)), y con un contando ordenar incluso podrías alcanzar el tiempo O(n).

Tenga en cuenta que esto se ordena en ascendente orden, no orden descendente. Ya que esto es tarea, lo dejaré como un ejercicio para que descubras qué cosa necesitas cambiar para arreglar esto.

Aquí hay algunas otras notas sobre los cambios que hice en su programa:

  • No llame a split en su entrada. Eso se divide en espacios en blanco, que probablemente no sea lo que desea, ya que su entrada de ejemplo no contiene ningún espacio en blanco.
  • solía map en lugar de un for loop para convertir todos los elementos en una secuencia.
  • solía min para encontrar el valor más pequeño en lugar de iterar sobre la secuencia.

respondido 10 mar '12, 08:03

Lo intenté. Se ve bien ya que estoy familiarizado con algunos de los códigos aquí. También descubrí qué cambiar para que descienda. Sin embargo, tengo una pregunta ... ¿es posible obtener resultados entre paréntesis? - marca soo

@MarkSoo: ¿Qué quieres decir? ¿Como esto? print ','.join('(' + x + ')' for x in n) - marca byers

Bueno, solo la salida entre paréntesis como esta: [654311]. PD: No estoy seguro de dónde puedo ingresar eso... - marca soo

@MarkSoo: print '[' + ''.join(map(str, n)) + ']' - marca byers

Tal vez no sea la mejor manera de ordenar una lista, pero aquí hay otro ejemplo :) Incluso puedo hacerlo sin ordenarlos.

from Queue import Queue
import threading
import time

def sleeper(x, queue):
    time.sleep(x)
    queue.put(x)

a = [3,2,1,4,3,2,5]
longest = max(a)
threads = {}
queue = Queue()
for num in a:
    threads[num] = threading.Thread(target=sleeper, args=(num, queue))
    threads[num].start()
threads.get(longest).join()

while not queue.empty():
    print queue.get()

respondido 10 mar '12, 08:03

Para Python puedes probar el siguiente código:

def Descending_Order(num): return int("".join(sorted(str(num), reverse=True)))

Respondido 18 ago 17, 12:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.