public static void Main()
TestSortZeros(new [] { 0, 0, 0, 1, 0, 2, 0, 3 });
TestSortZeros(new [] { 1, 0, 2, 0, 3, 0, 0, 0 });
TestSortZeros(new [] { 0, 0, 0, 1, 0, 2, 0, 3, 0, 0, 0 });
TestSortZeros(new [] { 0, 0, 0 });
TestSortZeros(new [] { 1, 2, 3 });
TestSortZeros(new int[] { });
public static string ArrayToString(int[] array) => '[' + String.Join(',', array.Select(x => x.ToString())) + ']';
public static void TestSortZeros(int[] array)
var original = ArrayToString(array);
Console.WriteLine($"Result: {original} -> {ArrayToString(array)}");
public static void SortZeros(int[] array)
int dest = FindLastNonZeroPosition(array, array.Length);
for (int i = 0; i < array.Length; i++)
Swap(ref array[i], ref array[dest]);
dest = FindLastNonZeroPosition(array, dest);
public static int FindLastNonZeroPosition(int[] array, int index)
for (int i = index - 1; i >= 0; i--)
public static void Swap(ref int x, ref int y)