Ограничения: время – 200ms/500ms, память – 128MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Напишите функции ``MergeSort`` и ``Merge``, псевдокод для которых написан ниже.
```c
int n;
...
int a[n];
...
MergeSort(a,0,n-1);
...
```
В качестве решения необходимо отправлять файл, содержащий только определение функции!
Алгоритм MergeSort`(A,l,r)`
// Входные данные: Подмассив `A[l...r]` массива `A[0...n - 1]`,
// определяемый начальным и конечным индексами `l` и `r`
// Выходные данные: Подмассив `A[l...r]`, отсортированный
// в неубывающем порядке
**if** `l<r`
`quad m larr |__(l+r)//2__|`
`quad` Mergesort`(A,l,m)`
`quad` Mergesort`(A,m+1,r)`
`quad` Merge`(A,l,m,r)`
Алгоритм Merge`(A,l,m,r)`
// Входные данные: Сортированные подмассивы `A[l...m]` и `A[m+1...r]`
// Выходные данные: Сортированный подмассив `A[l...r]`,
`p larr m-l+1; q larr r-m; i larr 0; j larr 0; k larr l`
Копировать `A[l...m]` в массив `B[0...p-1]`
Копировать `A[m+1...r]` в массив `C[0...q-1]`
**while** `i < p` **and** `j < q` **do**
`quad` **if** `B[i] <= C[j]`
`quad quad A[k] larr B[i]; i larr i + 1`
`quad` **else**
`quad quad A[k] larr C[j]; j larr j + 1`
`quad k larr k+1`
**if** `i < p`
`quad` Копировать `B[i...p-1]` в массив `A[k...r]`
**else**
`quad` Копировать `C[j...q-1]` в массив `A[k...r]`