using System;
using System.Collections.Generic;
public static class Program
{
public static void ShakerSort<T>(T[] arr, Comparison<T> comparison)
{
Int32 i, k, head, tail;
T hold;
head = 0;
tail = arr.Length - 1;
k = head;
while (head < tail)
{
for (i = head; i < tail; i++)
{
if (comparison(arr[i], arr[i + 1]) > 0)
{
hold = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = hold;
k = i;
}
}
tail = k;
for (i = tail; i > head; i--)
{
if (comparison(arr[i], arr[i - 1]) < 0)
{
hold = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = hold;
k = i;
}
}
head = k;
}
}
static void Main()
{
Random random = new Random();
Int32[] arr = new Int32[1000];
for (Int32 i = 0; i < arr.Length; i++)
{
arr[i] = random.Next() % arr.Length;
}
ShakerSort(arr, (x, y) => { return x.CompareTo(y); });
Array.ForEach(arr, (n) => Console.WriteLine(n));
}
}