1025-MergeSort

From Bitnami MediaWiki
Revision as of 16:00, 7 January 2023 by Larisa.Chiș (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

Se dă un șir cu n elemente, numere întregi. Folosind metoda MergeSort (Sortare prin interclasare), ordonați crescător elementele acestui șir.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran elementele șirului sortat, separate prin exact un spațiu.

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

1 ≤ n ≤ 100.000
elementele șirului vor fi cuprinse între -1.000.000.000 și 1.000.000.000

Exemplu[edit | edit source]

Intrare
12
10 0 -1 -3 1 -4 9 3 -1 -4 3 -4 
Ieșire
-4 -4 -4 -3 -1 -1 0 1 3 3 9 10

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

def mergeSort(array):

   if len(array) > 1:
       #  r is the point where the array is divided into two subarrays
       r = len(array)//2
       L = array[:r]
       M = array[r:]
       # Sort the two halves
       mergeSort(L)
       mergeSort(M)
       i = j = k = 0
       # Until we reach either end of either L or M, pick larger among
       # elements L and M and place them in the correct position at A[p..r]
       while i < len(L) and j < len(M):
           if L[i] < M[j]:
               array[k] = L[i]
               i += 1
           else:
               array[k] = M[j]
               j += 1
           k += 1
       # When we run out of elements in either L or M,
       # pick up the remaining elements and put in A[p..r]
       while i < len(L):
           array[k] = L[i]
           i += 1
           k += 1
       while j < len(M):
           array[k] = M[j]
           j += 1
           k += 1


  1. Print the array

def printList(array):

   for i in range(len(array)):
       print(array[i], end=" ")
   print()


  1. Driver program

if __name__ == '__main__':

   array_to_be_sorted = input('Introduceti o lista de numere, separate prin spatiu:')
   array_to_be_sorted = array_to_be_sorted.split()
   mergeSort(array_to_be_sorted)
   print("Sorted array is: ")
   printList(array_to_be_sorted)

</syntaxhighlight>