Предмет: Информатика, автор: Error2020Error

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

Приложения:

Ответы

Автор ответа: Alt0l
1

Відповідь:

       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;

       }

   }

}

Пояснення:

Интересные вопросы