using System;
using System.Collections.Generic;
public static class Program
{
enum Flag { Continue, Break };
public static void CombSort<T>(T[] arr, Comparison<T> comparison)
{
Int32 gap = arr.Length;
Flag flag = Flag.Continue;
while (flag == Flag.Continue || gap > 1)
{
flag = Flag.Break;
gap = (Int32)(gap / 1.3);
if (gap == 0)
{
gap = 1;
}
for (Int32 i = 0; i + gap < arr.Length; i++)
{
if (comparison(arr[i], arr[i + gap]) > 0)
{
//Swap
T hold = arr[i];
arr[i] = arr[i + gap];
arr[i + gap] = hold;
flag = Flag.Continue;
}
}
}
}
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;
}
CombSort(arr, (x, y) => { return x.CompareTo(y); });
Array.ForEach(arr, (n) => Console.WriteLine(n));
}
}