C# シェーカーソート

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));
    }
}