0180 - Sort Min Max

De la Universitas MediaWiki

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