0180 - Sort Min Max

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerința

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

Date de intrare

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

Date de ieșire

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

Restricții și precizări

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

Exemplul 1

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

Exemplul 2

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

Rezolvare

#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.")