Shell rendezés

using System;
 
class Program
{
	static void Main()
	{
		int[] t = new int[]  {22, 5, 4, 33, 9, 3, 7, 15, 20};
		int[] h = { 5, 3, 1};
		int n = t.Length;
 
		//Kiíratás rendezés előtt
		for(int i=0; i<n; i++)
			Console.Write("{0} ", t[i]);	
		Console.WriteLine();
 
		//Shell rendezés
		for(int k=0; k<h.Length; k++)
		{
			int lepes = h[k];
			for(int j=lepes; j<n; j++)
			{
				int i = j - lepes;
				int x = t[j];
				while(i>=0 && t[i]>x)
				{
					t[i+lepes] = t[i];
					i = i - lepes;
				}
				t[i+lepes] = x;
			}
		}
 
		//Kiíratás rendezés után
		for(int i=0; i<n; i++)
			Console.Write("{0} ", t[i]);	
		Console.WriteLine();		
 
	}
}