1846 - OrdonareSecvF REC

From Bitnami MediaWiki
Revision as of 22:07, 21 March 2023 by Catalin Moje (talk | contribs) (Pagină nouă: ==Cerinţa== Scrieţi definiția completă a subprogramului recursiv ordonare care are 4 parametri: a, prin care primeşte un tablou unidimensional cu maximum 1000 de numere naturale mai mici decât 1.000.000.000 și n, numărul efectiv de elemente ale tabloului și doi indici st dr. Subprogramul ordonează crescător elementele tabloului a cu indici între st și dr, inclusiv aceștia,fără a modifica celelalte elemente ale tabloului. ==Date de intrare== Se va introduce de...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Scrieţi definiția completă a subprogramului recursiv ordonare care are 4 parametri: a, prin care primeşte un tablou unidimensional cu maximum 1000 de numere naturale mai mici decât 1.000.000.000 și n, numărul efectiv de elemente ale tabloului și doi indici st dr. Subprogramul ordonează crescător elementele tabloului a cu indici între st și dr, inclusiv aceștia,fără a modifica celelalte elemente ale tabloului.

Date de intrare

Se va introduce de la tastatură un număr natural care va fi transmis ca perimetru

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

0 < n <= 1000 numele subprogramului cerut este ordonare parametrii sunt, în această ordine: a, n, st, dr 0≤st≤dr<n elementele tabloului a sunt indexate de la zero se recomandă realizarea unei soluții recursive

Exemplu

Dacă n=6, a=(63,273,9,83,93,123), st=1 și dr=3 după apelul subprogramului tabloul a devine (63,9,83,273,93,123).

Rezolvare

def ordonare(a, n, st, dr):
   if st >= dr:
       return
   pivot = a[dr]
   i = st - 1
   for j in range(st, dr):
       if a[j] < pivot:
           i += 1
           a[i], a[j] = a[j], a[i]
   i += 1
   a[i], a[dr] = a[dr], a[i]
   ordonare(a, n, st, i - 1)
   ordonare(a, n, i + 1, dr)
Pentru a testa subprogramul, se poate apela în felul următor:
n = int(input("Introduceti numarul de elemente: "))
a = []
for i in range(n):
   a.append(int(input(f"Introduceti elementul {i}: ")))
st = int(input("Introduceti indicele st: "))
dr = int(input("Introduceti indicele dr: "))
if 0 <= st <= dr < n:
   ordonare(a, n, st, dr)
   print(a)
else:
   print("Datele de intrare nu corespund restricțiilor impuse.")