Sort(Q,n):
for i = 0 to n-1
min = findMin(Q, n-i, n)
reorder(Q, min, n)
end for
findMin(Q, k, n):
min = infinity
for i = 1 to n
curr = dequeue(Q)
if curr < min && i<=k
min = curr
end if
enqueue(Q,curr)
end for
return min
reorder(Q, min, n):
for i = 1 to n
curr = dequeue(Q)
if (curr != min) // I'm assuming that there is a way to differentiate between any two items, this isn't hard to enforce
enqueue(Q, curr)
end if
end for
enqueue(Q,min)
ascendente en orden, se ejecuta en O (^ 2 n) el tiempo, en el espacio O (1) (es decir, la cola es O (espacio n), y el espacio extra que se requiere por el algoritmo es O (1))
Explicación:
Esencialmente, iterar a través de la cola de n veces, cada vez los costes de iteración 2n.
En cada iteración, pasamos por toda la cola y seleccionamos el mínimo dentro del número de elementos pertinente. Entonces, al principio, el número de elementos relevante es n, ya que queremos el mínimo de todos. La próxima iteración queremos el mínimo de los primeros n-1 elementos, y luego n-2 elementos, etc. Dado que el algoritmo se apilan estos mínimos al final.
Una vez que encontramos el mínimo, necesitamos iterar sobre toda la pila nuevamente para poder arrebatarlo y apilarlo al final.
La idea principal aquí, es que un dequeue seguido de un enqueue de ese mismo elemento nos permitirá iterar sobre la cola y verificar el mínimo/máximo conservando el orden.
Estaría muy sorprendido si se pudiera hacer esto. Sin embargo, creo que debes ser un poco más específico sobre qué tipo de memoria temporal puedes usar. Supongo que solo se te permite la memoria 'O (1)'. – ltjax
No hay límites ni en el tiempo ni en la complejidad del espacio. Sin embargo, se supone que la complejidad del espacio sería 1, a menos que haya una solución recursiva y el contar StackFrames creado por llamada recursiva se considera que agrega complejidad al espacio. – 3ashmawy
¿'peek' solo devuelve el encabezado de la cola, o puede usarlo para encontrar el valor de cualquier posición de la cola? – IVlad