0180 - Sort Min Max

From Bitnami MediaWiki

Cerința[edit | edit source]

Să se ordoneze crescător elementele dintr-un şir dat cuprinse între elementul de valoare maximă şi cel de valoare minimă.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale distincte, separate prin spaţii.

Date de ieșire[edit | edit source]

Programul afișează pe ecran elementele şirului după ordonare.

Restricții și precizări[edit | edit source]

  • 0 < n ≤ 1000;
  • elementele şirului sunt numere naturale mai mici decât 1.000.000;

Exemplul 1[edit | edit source]

Intrare
5
10 20 15 7 12
Ieșire
10 7 15 20 12
Datele de intrare corespund restricțiilor impuse.

Exemplul 2[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 0180 - Sort Min Max

def min_max_pos(n, a):

   min_val = float('inf') # initializam minimul cu o valoare  mare
   max_val = float('-inf') # initializam maximul cu o valoare mica
   min_pos = 0
   max_pos = 0
   for i in range(n):
       if a[i] < min_val:
           min_val = a[i]
           min_pos = i
       if a[i] > max_val:
           max_val = a[i]
           max_pos = i
   if min_pos > max_pos: # verificam daca pozitia minima e mai mare decat pozitia maxima
       min_pos, max_pos = max_pos, min_pos # interschimbam pozitiile
   return min_pos, max_pos

def sort_min_max(n, a):

   min_pos, max_pos = min_max_pos(n, a) # gasim pozitia minima si pozitia maxima
   for i in range(min_pos, max_pos): # parcurgem elementele din vector intre pozitia minima si 
                                     # pozitia maxima
       for j in range(i+1, max_pos+1): # parcurgem elementele din vector intre pozitia i si 
                                       # pozitia maxima
           if a[i] > a[j]: # daca elementul de pe pozitia i e mai mare decat cel de pe j
               a[i], a[j] = a[j], a[i] # interschimbam elementele

if __name__ == '__main__':

   n = int(input("Introduceti numarul de elemente din vector: "))
   a = list(map(int, input("Introduceti elementele vectorului: ").split()))
   # verificarea restrictiilor
   if 0 < n <= 1000 and all(1 <= x <= 10**6 for x in a):
       sort_min_max(n, a) # sortam elementele din vector intre pozitia minima si 
                                  # pozitia maxima
       print("Vectorul sortat:")
       print(*a) # afisam vectorul sortat folosind * pentru a separa elementele cu spatiu
       print("Datele de intrare corespund restricțiilor impuse.")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")



</syntaxhighlight>