קוד:
public static void Switch(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
public static void Sort(int[] a)
{
int i = 0, j = a.Length - 1, k = -1;
while (i <= j)
{
if (a[i] == 0 && a[j] == 0)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
i++;
while (i <= j && a[i] != 2)
{
if (a[i] == 0)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
}
else if (a[i] == 1)
{
if (k == -1)
{
k = i;
}
}
i++;
}
if (i > j)
{
break;
}
else
{
Switch(ref a[i], ref a[j]);
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
i++;
j--;
}
}
else if (a[i] == 0 && a[j] == 1)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
i++;
while (i <= j && a[i] != 2)
{
if (a[i] == 0)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
}
else if (a[i] == 1)
{
if (k == -1)
{
k = i;
}
}
i++;
}
if (i > j)
{
break;
}
else
{
Switch(ref a[i], ref a[j]);
if (k == -1)
{
k = i;
}
i++;
j--;
}
}
else if (a[i] == 0 && a[j] == 2)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
i++;
j--;
}
else if (a[i] == 1 && a[j] == 0)
{
if (k == -1)
{
k = i;
}
i++;
while (i <= j && a[i] != 2)
{
if (a[i] == 0)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
}
else if (a[i] == 1)
{
if (k == -1)
{
k = i;
}
}
i++;
}
if (i > j)
{
break;
}
else
{
Switch(ref a[i], ref a[j]);
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
i++;
j--;
}
}
else if (a[i] == 1 && a[j] == 1)
{
if (k == -1)
{
k = i;
}
i++;
while (i <= j && a[i] != 2)
{
if (a[i] == 0)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
}
else if (a[i] == 1)
{
if (k == -1)
{
k = i;
}
}
i++;
}
if (i > j)
{
break;
}
else
{
Switch(ref a[i], ref a[j]);
if (k == -1)
{
k = i;
}
i++;
j--;
}
}
else if (a[i] == 1 && a[j] == 2)
{
if (k == -1)
{
k = i;
}
i++;
j--;
}
else if (a[i] == 2 & a[j] == 0)
{
Switch(ref a[i], ref a[j]);
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
i++;
j--;
}
else if (a[i] == 2 && a[j] == 1)
{
Switch(ref a[i], ref a[j]);
if (k == -1)
{
k = i;
}
i++;
j--;
}
else if (a[i] == 2 & a[j] == 2)
{
j--;
while (i <= j && a[j] == 2)
{
j--;
}
if (i > j)
{
break;
}
else
{
Switch(ref a[i], ref a[j]);
if (a[i] == 0)
{
if (k > -1)
{
Switch(ref a[k], ref a[i]);
k++;
}
}
else if (a[i] == 1)
{
if (k == -1)
{
k = i;
}
}
i++;
j--;
}
}
}
}