Array 64. Даны три целочисленных массива A, B и C размера \(N_A, N_B, N_C\) соответственно, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера \(N_A + N_B + N_C\)) остался упорядоченным по убыванию.

Решение на Python 3

import random

def Merge(a,b,N_a,N_b):
L = []
i = 0
a_idx = 0
b_idx = 0
while i < (N_a+N_b) and a_idx < N_a and b_idx < N_b :
## print("i:",i,"; a_idx:",a_idx,"; b_idx:",b_idx)
if a[a_idx] == b[b_idx] :
L.append(a[a_idx])
L.append(b[b_idx])
a_idx += 1
b_idx += 1
i += 2
elif a[a_idx] > b[b_idx] :
L.append(a[a_idx])
a_idx += 1
i += 1
else :
L.append(b[b_idx])
b_idx += 1
i += 1
if a_idx == N_a :
while b_idx < N_b :
L.append(b[b_idx])
b_idx += 1
if b_idx == N_b :
while a_idx < N_a :
L.append(a[a_idx])
a_idx += 1

return L


N = random.randrange(2,6)
a = sorted([random.randrange(0,10) for i in range(N)],reverse = True)
b = sorted([random.randrange(0,10) for i in range(N)],reverse = True)
c = sorted([random.randrange(0,10) for i in range(N)],reverse = True)

print("N:",N)
print("Array a:\n",a)
print("Array b:\n",b)
print("Array c:\n",c)

d = sorted(a+b+c,reverse = True)

print("Length of d:\n",len(d))
print("Array c:\n",d)

d2 = Merge(a,b,N,N)
d2 = Merge(d2,c,N*2,N)

print("Length of d2:\n",len(d2))
print("Array d2:\n",d2)