2017-02-10 2 views
1

поэтому у меня вопрос в очереди. Мне нужно построить функцию, которая принимает очередь и возвращает ее отсортированную от наименьшего до самого большого значения. Я написал функцию, чтобы найти меня наименьшее число в очереди, не меняя саму очередь (проверил это одно, она работает) , а затем я написал:сортировка чисел в очереди

static Queue<int> Order(Queue<int> q) 
{ 
    int x; 
    Queue<int> help = new Queue<int>(); 
    while (!q.IsEmpty()) 
    { 
     if (q.Head() == Small(q)) 
      help.Insert(q.Remove()); 
     else 
     { 
      x = q.Remove(); 
      q.Insert(x); 
     } 
     Order(q); 
    } 
    while (!help.IsEmpty()) 
     q.Insert(help.Remove()); 
    return (q); 

}

, и я действительно могу я не вижу, где я испортил, потому что это доцентная работа. так что любое предложение? пс: Я работаю на C# 2010, и простите за плохой английский

+0

Нет версии C# 2010. Вы имеете в виду конкретную версию, такую ​​как C# 3.0 (или 4.0)? И если ваш код не работает должным образом, вы, вероятно, должны объяснить, как он работает в настоящее время. –

+0

mmm .. Я не знаю, какая версия это. И о том, как он себя ведет, если числа, которые я положил, уже в порядке, ничего не происходит, он просто печатает его, но когда они не говорят «необработанное исключение» – salam

ответ

2

попробовать эту отредактированную версию: (обратите внимание, что ваш код также своего рода входной параметр «д»)

static Queue<int> Order(Queue<int> q) 
{ 
    int x; 
    Queue<int> help = new Queue<int>(); 

    while (q.Count > 0) 
    { 
     if (q.Peek() == q.Min()) 
      help.Enqueue(q.Dequeue()); 
     else 
     { 
      x = q.Dequeue(); 
      q.Enqueue(x); 
     } 
     Order(q); 
    } 
    while (help.Count > 0) 
     q.Enqueue(help.Dequeue()); 
    return (q); 
} 

, но вы также можете использовать LINQ как показано ниже для получения отсортированной очереди:

static Queue<int> Order(Queue<int> q) 
{ 
    Queue<int> q2 = new Queue<int>(); 
    foreach (int i in q.OrderBy(x => x)) 
     q2.Enqueue(i); 
    return q2; 
} 
+0

Я бы решил пойти с маршрутом LINQ. Нет никакого преимущества, которое я могу видеть для реализации на лету сортировки. Было бы разумно, если бы данные транслировались. –

+0

Ну, спасибо большое за ответ, я думаю, что понимаю, что вы там делали, несмотря на то, что я не изучил те функции, которые вы использовали (я не уверен, буду ли я узнавать их позже, потому что я только начинаю это делать. .). Я действительно думал о другом способе сделать это, мне было просто любопытно, почему эта работа не работала. Но, еще раз спасибо. – salam

Смежные вопросы