using System; using System.Linq; using System.Collections.Generic; public class Test { public static void Main() { for (int i = 1 ; i != 16 ; i++) { Cycle(Enumerable.Range(1, 2*i).ToArray()); } } static void Cycle(int[] data) { int n = data.Length / 2; int p = 0; var seen = new bool[n]; while (true) { int last = data[p]; do { var tmp = data[p]; data[p] = last; last = tmp; if (p < n) { seen[p] = true; } p = (p/2) + (p%2 == 0 ? n : 0); } while (p >= n || !seen[p]); data[p] = last; while (p != n && seen[p]) { p++; } if (p == n) { break; } } Console.WriteLine(string.Join(" ", data)); } }