Сортировка массива через стек - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток!! Подскажите, пожалуйста, как мне отсортировать массив через стек, т.е. есть код как пользоваться стек, там же есть сортировка массива, но мне нужно совершенно другая сортировка. Я просто вообще не понимаю как сортируется массив в стеке. Пример сортировки в стеке
using System;
using System.Collections.Generic;
using System.Text;
 
namespace StackSort {
    class Program {
 
        static void SortCompareAndPush<T>(Stack<T> stack, ref T item)
            where T: IComparable<T> {
            if (stack.Count > 0) {    // if(!stack.IsEmpty) {
                do {
                    T next_item = stack.Pop();
                    if (item.CompareTo(next_item) == 1) {   // if(item > next_item) {
                        T temp = item;
                        item = next_item;
                        next_item = temp;
                    }
                    SortCompareAndPush<T>(stack, ref next_item);
                } while (item.CompareTo(stack.Peek()) == 1);  // } while(item > stack.Top);
            }
            stack.Push(item);
        }
 
        static void SortStack<T>(Stack<T> stack)
            where T : IComparable<T> {
            if (stack.Count > 1) {     // if(!stack.IsEmpty) {
                T item = stack.Pop();
                SortCompareAndPush<T>(stack, ref item);
            }
        }
 
        static void PrintStack<T>(Stack<T> stack) {
            foreach (T item in stack) {
                Console.WriteLine(item);
            }
        }
 
        static void Main(string[] args) {
            Stack<int> stack = new Stack<int>();
 
            Random rnd = new Random();
            for (int i = 0; i < 20; ++i) 
                stack.Push(rnd.Next(100));
 
            Console.WriteLine("Initial stack:");
            PrintStack<int>(stack);
 
            SortStack<int>(stack);
 
            Console.WriteLine("Sorted stack:");
            PrintStack<int>(stack);
 
            Console.ReadKey();
        }
    }
}
Вот моя сортировка массива, по алгоритму Шелла:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace AlgoritmShella
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rdn = new Random();
            int n = 1000;
            int[] mas = new int[n];
            for (int i = 1; i < n; i++)
            {
                mas[i] = rdn.Next(1, 1000);
            }
            Console.WriteLine("Массив:");
            Console.WriteLine("------------------------------------------");
            for (int i = 1; i < n; i++)
            {
                Console.WriteLine(mas[i]);
            }
            Console.WriteLine("------------------------------------------");
 
            int tmp;
            int j;
            Console.WriteLine("Сортировка:");
            Console.WriteLine("------------------------------------------");
            int step = n / 2;//инициализируем шаг.
            while (step > 0)//пока шаг не 0
            {
                for (int i = 0; i < (n - step); i++)
                {
                    j = i;
                    while (j >= 0 && mas[j] > mas[j + step])
                    {
                        int temp = mas[j];
                        mas[j] = mas[j + step];
                        mas[j + step] = temp;
                        j--;
                    }
                }
                step = step / 2;
            }
                Console.WriteLine("------------------------------------------");
 
            Console.WriteLine("Вывод:");
            wr.WriteLine("Вывод:\n");
 
            for (int i = 1; i < n; i++ )
            {
                Console.WriteLine("mas[{0}] = {1}", i, mas[i]);
            }
 
                Console.ReadKey();
        }
    }
}
Помогите пожалуйста
Проще говоря, как мне запихнуть весь массив в стек и отсортировать его по нужному алгоритму, я просто не понимаю как это сделать.

Решение задачи: «Сортировка массива через стек»

textual
Листинг программы
static void SortStack(Stack<int> stack) {
   int n = stack.Count;
   int step = n / 2;
   int j;
   while (step > 0) {
      for (int i = 0; i < (n - step); i++) {
         j = i;
         while (j >= 0 && stack.ElementAt(j) > stack.ElementAt(j + step)) {
            int temp = stack.ElementAt(j);
            SetStackItem(stack, j, stack.ElementAt(j + step));
            SetStackItem(stack, j + step, temp);
            j--;
         }
      }
      step /= 2;
   }
}
static void SetStackItem(Stack<int> stack, int index, int value) {
   Stack<int> items = new Stack<int>();
   int length = stack.Count;
   index = length - index;
   for (int i = 0; i < length - index; i++)
      items.Push(stack.Pop());
   stack.Pop();
   stack.Push(value);
   for (int i = 0; i < length - index; i++)
      stack.Push(items.Pop());
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы