Сортировка по заданому значению - 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);
}
}