Сортировка по заданому значению - C#
Формулировка задачи:
Дан одномерный список элементов, выбрать в нем любой элемент (обозначим его b) и заполнить другой список так, чтобы сначала шли все элементы меньшие b, затем равные b, затем большие b.
Как работают списки обьяснять не нужно. Я не могу придумать алгоритм по которому реализовать сортировку. Помогите пожалуйста, проведите примеры(только на основе простого одномерного массива чтоб легче было понять, а к спискам я это уже сам применю, надеюсь)
спасибо.
class MClass { int[] arr; int[] SortArr; int nElems; int Size; public MClass(int i) { arr = new int[i]; } public void Insert(int i) { arr[nElems] = i; nElems++; } public void Sort(int i) //это метод для сортировки { } public void Print() { for (int i=0;i<Size;i++) { Console.WriteLine(); } } }
Решение задачи: «Сортировка по заданому значению»
textual
Листинг программы
class LinkList { Link first; NewLink NewFirst; NewLink NewLast; public void Insert(int j) { Link newLink = new Link(); newLink.IData = j; newLink.next = first; first = newLink; } public void Print() { Link current = first; while (current!=null) { current.Print(); current = current.next; } } public bool isEmpty() { return NewFirst==null; } public void SortByKey(int key) { Link current = first; while (current!=null) { if (key>current.IData) { NewLink NL = new NewLink(); NL.IData = current.IData; if (isEmpty()) { NewLast = NL; } else { NewFirst.previous = NL; } NL.next = NewFirst; NewFirst = NL; } if (key < current.IData) { NewLink NL = new NewLink(); NL.IData = current.IData; if (isEmpty()) { NewFirst = NL; } else { NewLast.next = NL; NL.previous = NewLast; } NewLast = NL; } current = current.next; } Link curr = first; while (curr.next != null) { if (key == curr.IData ) { insert(key); } curr = curr.next; } } public void insert(int key) { NewLink newLink = new NewLink(); newLink.IData = key; NewLink previous = null; NewLink current = NewFirst; while (current != null && key>current.IData ) { previous = current; current = current.next; } if (previous == null) NewFirst = newLink; else previous.next = newLink; newLink.next = current; } public void PrintSort() { NewLink current = NewFirst; while (current!=null) { current.Print(); current = current.next; } } } class Program { static void Main(string[] args) { LinkList LL = new LinkList(); LL.Insert(12); LL.Insert(4); LL.Insert(25); LL.Insert(54); LL.Insert(10); LL.Insert(88); LL.Insert(0); LL.Insert(54); LL.Insert(333); LL.Insert(25); LL.Insert(4); LL.Insert(54); LL.Insert(101); LL.Insert(29); LL.Insert(25); LL.Insert(54); LL.SortByKey(54); LL.PrintSort(); Console.ReadKey(); } } class NewLink { public int IData; public NewLink next; public NewLink previous; public void Print() { Console.Write("{0},", IData); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д