Сортировка массива через стек - 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()); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д