<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1025_-_MergeSort</id>
	<title>1025 - MergeSort - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1025_-_MergeSort"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1025_-_MergeSort&amp;action=history"/>
	<updated>2026-05-01T08:42:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1025_-_MergeSort&amp;diff=534&amp;oldid=prev</id>
		<title>Bogdan.Pop: Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1025/mergesort 1025 - MergeSort] ---- == Cerinţa == Se dă un şir &#039;&#039;&#039;lista&#039;&#039;&#039; cu &#039;&#039;&#039;numar&#039;&#039;&#039; elemente, numere întregi. Folosind metoda MergeSort (Sortare prin interclasare), ordonați crescător elementele acestui șir. == Date de intrare == Programul citește de la tastatură numărul &#039;&#039;&#039;numar&#039;&#039;&#039;, iar apoi cele &#039;&#039;&#039;numar&#039;&#039;&#039; elemente ale şirului &#039;&#039;&#039;lista&#039;&#039;&#039;. == Date de ieșire ==  Pe ecran se va afișa mesajul: &quot;Datele de intrare core...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1025_-_MergeSort&amp;diff=534&amp;oldid=prev"/>
		<updated>2023-02-20T17:07:02Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/1025/mergesort 1025 - MergeSort] ---- == Cerinţa == Se dă un şir &amp;#039;&amp;#039;&amp;#039;lista&amp;#039;&amp;#039;&amp;#039; cu &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039; elemente, numere întregi. Folosind metoda MergeSort (Sortare prin interclasare), ordonați crescător elementele acestui șir. == Date de intrare == Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039;, iar apoi cele &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039; elemente ale şirului &amp;#039;&amp;#039;&amp;#039;lista&amp;#039;&amp;#039;&amp;#039;. == Date de ieșire ==  Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare core...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1025/mergesort 1025 - MergeSort]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir &amp;#039;&amp;#039;&amp;#039;lista&amp;#039;&amp;#039;&amp;#039; cu &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039; elemente, numere întregi. Folosind metoda MergeSort (Sortare prin interclasare), ordonați crescător elementele acestui șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039;, iar apoi cele &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039; elemente ale şirului &amp;#039;&amp;#039;&amp;#039;lista&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;, urmat, pe rândul următor, de elementele șirului &amp;#039;&amp;#039;&amp;#039;lista&amp;#039;&amp;#039;&amp;#039; sortat, separate prin exact un spațiu. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039; &amp;amp;isin; &amp;amp;#8469;&lt;br /&gt;
* 1 &amp;amp;les; &amp;#039;&amp;#039;&amp;#039;numar&amp;#039;&amp;#039;&amp;#039; &amp;amp;les; 100.000&lt;br /&gt;
* &amp;#039;&amp;#039;element lista&amp;#039;&amp;#039; &amp;amp;isin; &amp;amp;#8484;&lt;br /&gt;
* -1.000.000.000 &amp;amp;les; &amp;#039;&amp;#039;element lista&amp;#039;&amp;#039; &amp;amp;les; 1.000.000.000&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 12&lt;br /&gt;
: 10 0 -1 -3 1 -4 9 3 -1 -4 3 -4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
: -4 -4 -4 -3 -1 -1 0 1 3 3 9 10&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
; Intrare&lt;br /&gt;
: abc&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
; Intrare&lt;br /&gt;
: -25&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1025 - Mergesort&lt;br /&gt;
&lt;br /&gt;
def validare_date_numar(numar: str) -&amp;gt; bool:&lt;br /&gt;
    try:&lt;br /&gt;
        int(numar)&lt;br /&gt;
        &lt;br /&gt;
        if 1 &amp;lt;= int(numar) &amp;lt;= 100_000:&lt;br /&gt;
            return True&lt;br /&gt;
        else:&lt;br /&gt;
            return False&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        return False&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
def validare_date_sir(lista: list) -&amp;gt; bool:&lt;br /&gt;
    return all(-1_000_000_000 &amp;lt;= int(element) &amp;lt;= 1_000_000_000 for element in lista)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def merge(lista: list, left: int, mid: int, right: int):&lt;br /&gt;
    len1 = mid - left + 1&lt;br /&gt;
    len2 = right - mid&lt;br /&gt;
    &lt;br /&gt;
    left_arr = [0] * (len1)&lt;br /&gt;
    right_arr = [0] * (len2)&lt;br /&gt;
    &lt;br /&gt;
    for indice1 in range(len1):&lt;br /&gt;
        left_arr[indice1] = lista[left + indice1]&lt;br /&gt;
        &lt;br /&gt;
    for indice2 in range(0, len2):&lt;br /&gt;
        right_arr[indice2] = lista[mid + 1 + indice2]&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    indice1 = int(0)&lt;br /&gt;
    indice2 = int(0)&lt;br /&gt;
    indice3 = left&lt;br /&gt;
    &lt;br /&gt;
    while indice1 &amp;lt; len1 and indice2 &amp;lt; len2:&lt;br /&gt;
        if left_arr[indice1] &amp;lt;= right_arr[indice2]:&lt;br /&gt;
            lista[indice3] = left_arr[indice1]&lt;br /&gt;
            indice1 += 1&lt;br /&gt;
        else:&lt;br /&gt;
            lista[indice3] = right_arr[indice2]&lt;br /&gt;
            indice2 += 1&lt;br /&gt;
&lt;br /&gt;
        indice3 += 1&lt;br /&gt;
        &lt;br /&gt;
    while indice1 &amp;lt; len1:&lt;br /&gt;
        lista[indice3] = left_arr[indice1]&lt;br /&gt;
        indice1 += 1&lt;br /&gt;
        indice3 += 1&lt;br /&gt;
        &lt;br /&gt;
    while indice2 &amp;lt; len2:&lt;br /&gt;
        lista[indice3] = right_arr[indice2]&lt;br /&gt;
        indice2 += 1&lt;br /&gt;
        indice3 += 1&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
def mergesort(lista: list, left: int, right: int):&lt;br /&gt;
    if left &amp;lt; right:&lt;br /&gt;
        mid = left + (right - left) // 2&lt;br /&gt;
        &lt;br /&gt;
        mergesort(lista, left, mid)&lt;br /&gt;
        mergesort(lista, mid + 1, right)&lt;br /&gt;
        &lt;br /&gt;
        merge(lista, left, mid, right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    numar = input()&lt;br /&gt;
    &lt;br /&gt;
    if validare_date_numar(numar):&lt;br /&gt;
        numar = int(numar)&lt;br /&gt;
        lista = input()&lt;br /&gt;
        lista = lista.split(&amp;quot; &amp;quot;)&lt;br /&gt;
        if validare_date_sir(lista):&lt;br /&gt;
            lista = list(map(int, lista))&lt;br /&gt;
            &lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            mergesort(lista, 0, numar - 1)&lt;br /&gt;
            print(lista)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bogdan.Pop</name></author>
	</entry>
</feed>