мари13121
27.03.2021 05:56

Объясните (ОЧЕНЬ подробно следующий код о соортировке массива слиянием, написанный на языке программирования C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
class Program
{
static void Main(string[ ] args)
{
int[ ] arr = { 3, 5, 1, 5, 1, 7, 2 };
foreach (int a in arr)
Console.Write(a + " "); Console.ReadKey();
CycleMergeSort(ref arr);
Console.WriteLine();
foreach (int a in arr)
Console.Write(a + " "); Console.ReadKey();
}

static void CycleMergeSort(ref int[ ] arr)
{
for (int size = 1; size < arr.Length; size *= 2)
for (int i = 0; i < arr.Length; i += size * 2)
MergeSorted(ref arr, i, size);
}

static void MergeSorted(ref int[ ] arr, int startIndex, int leftLength) // leftLength - длина объединяемого массива
{
int rightLength = arr.Length - startIndex - leftLength;
if (leftLength < rightLength)
rightLength = leftLength;
if (rightLength <= 0)
return;
int[ ] result = new int[leftLength + rightLength];
for (int l = 0, r = 0; l < leftLength || r < rightLength;)
{
if (r == rightLength || l != leftLength && arr[startIndex + l] < arr[startIndex + leftLength + r])
{
result[l + r] = arr[startIndex + l];
l++;
}
else
{
result[l + r] = arr[startIndex + leftLength + r];
r++;
}
}
for (int i = 0; i < leftLength + rightLength; i++)
arr[i + startIndex] = result[i];
}
}
}

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Ilonka2734
28.04.2022 22:39
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018
// Внимание! Если программа не работает, обновите версию!

begin
  Writeln('*** Исходный массив ***');
  var v:=MatrRandom(7,7,-15,15);
  v.Println(4); Writeln(4*v.ColCount*'-');
  var pr3:=v.Row(2).Aggregate(1,(x,y)->x*y);
  Writeln('Произведение элементов 3-й строки равно ',pr3);
  Writeln('Количество элементов, больших этого произведения, равно ',
      v.ElementsByRow.Where(t->t>pr3).Count);
  Writeln('Максимум в 3-м столбце равен ',v.Col(2).Max)
end.

Пример
*** Исходный массив ***
  -4 -12 -15  -2  13   3 -15
  -7  -1 -15   2  -2   4  -6
  14   5   5  15  -4   3   0
  13  15   9  14  11  -9  11
   1  14  14   1  -4  -1  -7
  15 -10 -13  -3  -8 -12  11
   0 -13  -8   4   6   1 -11

Произведение элементов 3-й строки равно 0
Количество элементов, больших этого произведения, равно 24
Максимум в 3-м столбце равен 14
0,0(0 оценок)
Ответ:
haaahahaha12345
28.04.2022 22:39
// PascalABC.NET 3.3, сборка 1576 от 16.11.2017
// Внимание! Если программа не работает, обновите версию!

begin
var V:=MatrRandom(7,7,-15,15);v.Println;
var com:= V.Row(2).Aggregate(BigInteger(1),(x,y)->(x*y));
Writeln('Произведение эл-в 3ей строки = ', com);
var cnt := 0;
Foreach var x in V.Row(2) do
  if x > com then inc(cnt);
Writeln('Количество элементов, больших чем это произведение = ', cnt);
Writeln('Максимальный элемент 3го столбца = ', V.Col(2).Max);
end.

Пример:
    2  -4 -15  10  -1   2   6
  15  -8  11   5  14  10  15
   0  15 -10  13  -8 -13  14
  14   6  13 -10   9   6 -12
 -14   1   8  -9   1 -12  12
  15   9  10  -7 -14   6  -3
   9   9  -1 -14   1   1   3
Произведение эл-в 3ей строки  = 0
Количество элементов, больших чем это произведение = 3
Максимальный элемент 3го столбца = 13

Правил
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота