0513 - K Sort 1

De la Universitas MediaWiki

Cerința

Se dă un șir cu n elemente, numere naturale, numerotate începând cu 1 și un număr k. Considerăm k subșiruri ale șirului, astfel:

  • primul subșir este format din elementele din șir numerotate cu 1, k+1, 2*k+1, …
  • al doilea subșir este format din elementele din șir numerotate cu 2, k+2, 2*k+2, …
  • al k-lea subșir este format din elementele din șir numerotate cu k, 2*k, 3*k, …

Ordonați crescător fiecare dintre aceste subșiruri și afișați șirul obținut.

Date de intrare

Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele șirului.

Date de ieșire

Programul va afișa pe ecran elementele șirului, separate prin exact un spațiu, după efectuarea operațiilor cerute.

Restricții și precizări

  • 1 ≤ k < n ≤ 1000;
  • cele n numere citite vor fi mai mici decât 1.000.000.000;

Exemplul 1

Intrare
11 3
7 5 4 3 1 6 8 9 11 10 2
Ieșire
3 1 4 7 2 6 8 5 11 10 9
Datele de intrare corespund restricțiilor impuse.

Exemplul 2

Intrare
0
0
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#0513 - K Sort 1
def sortare_intercalata(n, k, a):
    # sortare intercalata
    for i in range(k):
        v = []
        p = 0
        for j in range(i, n, k):
            v.append(a[j])
            p += 1
        v.sort()
        p = 0
        for j in range(i, n, k):
            a[j] = v[p]
            p += 1
    return a

if __name__ == '__main__':
    # citirea numarului de elemente din vector si a vectorului
    n, k = map(int, input("Introduceti numarul de elemente si valoarea k: ").split())
    a = list(map(int, input("Introduceti elementele vectorului (separate prin spatiu): ").split()))

    # verificarea restrictiilor
    if 1 <= n <= 1000 and all(1 <= x <= 10**9 for x in a):
        a_sorted = sortare_intercalata(n, k, a)
        # afisarea vectorului sortat
        print("Datele de intrare corespund restricțiilor impuse.")
        for i in range(n):
            print(a_sorted[i], end=" ")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")