Помогите мне нужно сделать багато фазове сортування злиттям на 4 канали на мові C# Windows Forms, задача на фото

Ответы
Відповідь:
private void button1_Click_1(object sender, EventArgs e)
{
//Масив
int[] arr = new int[] { 11, 23, 17, 47, 25, 4, 20, 49, 38, 30, 14, 5, 35, 7, 46, 7, 44, 28, 27, 48, 39, 2, 14, 23, 8, 26, 10, 5, 15, 2, 9 };
int n = arr.Length;
string nesortmas = string.Join(", ", arr);
textBox1.Text = nesortmas;
// Багатофазове сортування на 4 канали
int[] arr1 = new int[n];
int[] arr2 = new int[n];
int[] arr3 = new int[n];
int[] arr4 = new int[n];
int count1 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] % 4 == 0)
{
arr1[count1] = arr[i];
count1++;
}
else if (arr[i] % 4 == 1)
{
arr2[count2] = arr[i];
count2++;
}
else if (arr[i] % 4 == 2)
{
arr3[count3] = arr[i];
count3++;
}
else if (arr[i] % 4 == 3)
{
arr4[count4] = arr[i];
count4++;
}
}
Array.Sort(arr1, 0, count1);
Array.Sort(arr2, 0, count2);
Array.Sort(arr3, 0, count3);
Array.Sort(arr4, 0, count4);
int[] result = new int[n];
int i1 = 0, i2 = 0, i3 = 0, i4 = 0, j = 0;
for (int i = 0; i < n; i++)
{
if (i1 < count1 && (i2 >= count2 || arr1[i1] <= arr2[i2]) && (i3 >= count3 || arr1[i1] <= arr3[i3]) && (i4 >= count4 || arr1[i1] <= arr4[i4]))
{
result[i] = arr1[i1];
i1++;
}
else if (i2 < count2 && (i3 >= count3 || arr2[i2] <= arr3[i3]) && (i4 >= count4 || arr2[i2] <= arr4[i4]))
{
result[i] = arr2[i2];
i2++;
}
else if (i3 < count3 && (i4 >= count4 || arr3[i3] <= arr4[i4]))
{
result[i] = arr3[i3];
i3++;
}
else
{
result[i] = arr4[i4];
i4++;
}
}
while (i1 < count1)
{
result[j] = arr1[i1];
i1++;
j++;
}
while (i2 < count2)
{
result[j] = arr2[i2];
i2++;
j++;
}
while (i3 < count3)
{
result[j] = arr3[i3];
i3++;
j++;
}
while (i4 < count4)
{
result[j] = arr4[i4];
i4++;
j++;
}
// Виведення відсортованого масиву в textBox2
string sortedArr = string.Join(", ", result);
textBox2.Text = sortedArr;
}
}
}
Пояснення: