Как реализовать пузырьковую сортировку в обобщенном двусвязном списке? - C#
Формулировка задачи:
Как реализовать пузырьковую сортировку в обобщенном двусвязном списке? Сначала думал все просто, хотел реализовать операции перегрузки операторов, но оказалось для обобщенного типа нельзя этого сделать.
Решение задачи: «Как реализовать пузырьковую сортировку в обобщенном двусвязном списке?»
textual
Листинг программы
class Program
{
static void Main(string[] args)
{
Car first = null, prev = null;
Random r = new Random();
for (int i = 0; i < 10; i++)
{
prev = new Car(prev, first, r.Next(1990, 2016));
if (i == 0) first = prev;
Console.WriteLine(prev.year);
}
Console.WriteLine("----");
Car.Sort(first);
Car.Print(first);
Console.ReadKey(true);
}
}
class Car
{
Car prev, next;
public int year;
public Car(Car prev, Car next, int year)
{
this.year = year;
if (prev == null) this.prev = this.next = this;
else
{
prev.next = next.prev = this;
this.prev = prev;
this.next = next;
}
}
static public void Sort(Car first)
{
for (Car end = first.prev; end != first; end = end.prev)
for (Car ptr = first; ptr != end; ptr = ptr.next)
if (ptr.year > ptr.next.year)
{
int year = ptr.year;
ptr.year = ptr.next.year;
ptr.next.year = year;
}
}
static public void Print(Car first)
{
Car ptr = first;
do
{
Console.WriteLine(ptr.year);
ptr = ptr.next;
} while (ptr != first);
}
}