Вот метод, который я думаю, может работать: -
Алгоритм использует рекурсии для сортировки очереди.
Предположим, что мы имеем функцию copy_from, которая может копировать из одной очереди к другой очереди следующим образом: -
void copy_from (ArrayQueue&Q_from,ArrayQueue& Q_to){
while(!Q_from.empty()){
int t= Q_from.front();
Q_to.enqueue(t);
Q_from.dequeue();
}
}
Основная функция сортировки, как показано: -
void sort(ArrayQueue &Q, int element, ArrayQueue&Q2){
if(Q.size()==1){
if(Q.front()>element){
int front = Q.front();
Q.dequeue();
Q.enqueue(element);
Q.enqueue(front);
}
else{
Q.enqueue(element);
}
}
else{
int front = Q.front();
Q.dequeue();
sort(Q,front); // sort the remaining queue.
int sorted_front = Q.front(); //get front element of sorted queue
if(element<sorted_front){
Q2.enqueue(element);
copy_from(Q,Q2);
copy_from(Q2,Q);
}
else{
// dequeue all elements from the queue which are lesser than element and put it into new queue.
// Then enqueue the new element
// Then enqueue whatevers bigger than element into the queue.
Q2.enqueue(sorted_front);
Q.dequeue();
while(!Q.empty()&&Q.front()<element){
Q2.enqueue(Q.front());
Q.dequeue();
}
Q2.enqueue(element);
copy_from(Q,Q2);
copy_from(Q2,Q);
}
}
}
Когда мы изначально позвоните в функцию сортировки, мы можем назвать это следующим образом: -
Queue Q, Q2;
int front = Q.front();
Q.dequeue();
sort(Q,front,Q2);
Если бы у нас был вход как 6-> 4-> 9> 2-> 1, результатом будет 9-> 6-> 4-> 2-> 1.
Какой язык вы используете? Предоставьте некоторую информацию об окружающей среде проблемы, которую вы решаете. Возможно, уже существует хорошая реализация сортировки последовательности. Говорить абстрактно. Алгоритм Quicksort лучше и, вероятно, является лучшим для многих случаев. – EvAlex
. Итак, вы хотите получить две разные очереди? Один сортированный, один несортированный? Какой langauge вы используете? Как правило, (по крайней мере, вне школы) вам лучше всего просто называть встроенный алгоритм сортировки langauge, а не создавать свои собственные. – acattle
К сожалению, это очередь. Я не могу использовать quicksort, так как я могу использовать только одну очередность, поэтому (насколько я понимаю, qsort занимает больше). – SigmaOmega