{"id":"informatyka-2018-maj-matura-rozszerzona/zad/2.2","paper_id":"informatyka-2018-maj-matura-rozszerzona","number":"2.2","points":4,"ptype":"open","subject":"informatyka","category":"matura","year":2018,"month":"maj","level":"rozszerzona","text":"Zadanie 2.2. (0-4)\nNapisz algorytm (w pseudokodzie lub wybranym języku programowania), który przestawi\nelementy tablic X i Y tak, aby szczyty były uporządkowane w kolejności, w której obserwator\nwidzi je od lewej do prawej strony. Aby otrzymać maksymalną ocenę, Twój algorytm powinien\nmieć złożoność czasową kwadratową lub mniejszą.\nAlgorytm może używać wyłącznie instrukcji sterujących, operatorów arytmetycznych,\noperatorów logicznych, porównań i przypisań do zmiennych. Zabronione jest używanie funkcji\nbibliotecznych dostępnych w językach programowania.\nSpecyfikacja:\nDane:\nn\n- liczba całkowita dodatnia\nX[1 n] - tablica liczb całkowitych\nY[1 n] - tablica liczb całkowitych dodatnich\nPara (X[i], Y[i]) to współrzędne jednego szczytu, i = 1, 2, …, n.\nŻadne dwa szczyty nie leżą w jednej linii z obserwatorem.\nWynik:\nX[1 n], Y[1 n] - tablice zawierające współrzędne danych szczytów, uporządkowanych\nw kolejności, w której obserwator widzi je od lewej do prawej strony.\nAlgorytm\nMIN_1R","answer":null,"answer_text":"Zadanie 2.2. (0-4)\nWymagania ogólne\nWymagania szczegółowe\nIII. Rozwiązywanie problemów\ni podejmowanie decyzji […] z zastosowaniem\npodejścia algorytmicznego.\n5. Rozwiązywanie problemów\ni podejmowanie decyzji […], stosowanie\npodejścia algorytmicznego.\nZdający:\n1) analizuje, modeluje i rozwiązuje sytuacje\nproblemowe z różnych dziedzin;\n2) stosuje podejście algorytmiczne do\nrozwiązywania problemu;\n4) dobiera efektywny algorytm do\nrozwiązania sytuacji problemowej\ni zapisuje go w wybranej notacji;\n5) posługuje się podstawowymi technikami\nalgorytmicznymi;\n11) opisuje podstawowe algorytmy\ni stosuje:\nb) algorytmy wyszukiwania\ni porządkowania (sortowania), np.:\n- algorytmy sortowania ciągu liczb:\nbąbelkowy, przez wybór, przez wstawianie\nliniowe lub binarne, przez scalanie, szybki,\nkubełkowy.\nSchemat punktowania\n4 p. - za poprawny algorytm, w tym:\n1 p. - za poprawną konstrukcję zewnętrznej pętli algorytmu sortowania,\n1 p. - za poprawną konstrukcję wewnętrznej pętli algorytmu sortowania,\n1 p. - za poprawne porównanie elementów,\n1 p. - za poprawną zamianę elementów uwzględniającą zarówno X, jak i Y.\nUwaga: za prawidłowe rozwiązanie o złożoności większej niż kwadratowa - maksymalnie 3\npunkty,\n0 p. - za podanie odpowiedzi błędnej albo brak odpowiedzi.\nUwaga: za każde inne niż przedstawione niżej, ale całkowicie poprawne rozwiązanie\nprzyznajemy maksymalną liczbę punktów.\nPrzykładowe rozwiązania\nPrzykładowe rozwiązanie 1. (sortowanie bąbelkowe):\npowtarzaj n-1 razy:\ndla i = 1, 2, , n-1\njeżeli X[i+1]/Y[i+1] < X[i]/Y[i]\nt = X[i]\nX[i] = X[i+1]\nX[i+1] = t\nt = Y[i]\nY[i] = Y[i+1]\nY[i+1] = t\nPrzykładowe rozwiązanie 2. (sortowanie przez wybór):\ndla i = 1, 2, , n-1:\nm = i\ndla j = i+1, i+2, , n\njeżeli X[j]/Y[j] < X[m]/Y[m]\nm = j\nt = X[i]\nX[i] = X[m]\nX[m] = t\nt = Y[i]\nY[i] = Y[m]\nY[m] = t\nPrzykładowe rozwiązanie 3. (sortowanie przez wstawianie):\ndla i = 2, 3, , n:\nj = i\ndopóki j>1 oraz X[j]/Y[j]<X[j-1]/Y[j-1]:\nt = X[j]\nX[j] = X[j-1]\nX[j-1] = t\nt = Y[j]\nY[j] = Y[j-1]\nY[j-1] = t\nj = j-1","solution":"## Poprawna odpowiedź\n\n**Algorytm - sortowanie bąbelkowe (bubble sort) wg ilorazu X[i]/Y[i]:**\n\npowtarzaj n-1 razy:\ndla i = 1, 2, , n-1 wykonuj:\njeżeli X[i+1]/Y[i+1] < X[i]/Y[i]:\nt ← X[i]\nX[i] ← X[i+1]\nX[i+1] ← t\nt ← Y[i]\nY[i] ← Y[i+1]\nY[i+1] ← t\n\n## Sposób 1 - sortowanie bąbelkowe\n\n**Idea:** w każdym przejściu \"bąbel\" (największy nieuporządkowany element) wędruje na koniec. Powtarzając n-1 razy, mamy gwarancję pełnego posortowania.\n\n**Klucz porównania:** `X[i]/Y[i]` (kąt nachylenia od obserwatora).\n\n**Zamiana par (X[i], Y[i]) ↔ (X[i+1], Y[i+1])** - zamieniamy OBIE tablice synchronicznie.\n\n## Sposób 2 - implementacja Python\n\n```python\ndef sortuj_szczyty(X, Y):\nn = len(X)\nfor k in range(n - 1):\nfor i in range(n - 1 - k): # optymalizacja: ostatnie k jest posortowane\nif X[i+1] / Y[i+1] < X[i] / Y[i]:\nX[i], X[i+1] = X[i+1], X[i]\nY[i], Y[i+1] = Y[i+1], Y[i]\nreturn X, Y\n\nX = [3, -2, 2, 1]\nY = [4, 2, 1, 3]\nprint(sortuj_szczyty(X, Y))\n# Posortowane: D(-2,2), A(1,3), B(3,4), C(2,1)\n# X = [-2, 1, 3, 2], Y = [2, 3, 4, 1]\n\n## Sposób 3 - sortowanie przez wybieranie (selection sort)\n\nAlternatywa - w każdym przejściu wybieramy minimum z reszty i wymieniamy z pozycją k:\n\ndla k = 1, 2, , n-1 wykonuj:\nmin_idx ← k\ndla i = k+1, , n wykonuj:\njeżeli X[i]/Y[i] < X[min_idx]/Y[min_idx]:\nmin_idx ← i\nzamień X[k] z X[min_idx]\nzamień Y[k] z Y[min_idx]\n\n**C++ (selection sort):**\n```cpp\nvoid sortuj(int X[], int Y[], int n) {\nfor (int k = 0; k < n - 1; k++) {\nint min_idx = k;\nfor (int i = k + 1; i < n; i++) {\n// X[i]/Y[i] < X[min_idx]/Y[min_idx]\nif ((long long)X[i] * Y[min_idx] < (long long)X[min_idx] * Y[i]) {\nmin_idx = i;\n}\n}\nif (min_idx != k) {\nint tx = X[k]; X[k] = X[min_idx]; X[min_idx] = tx;\nint ty = Y[k]; Y[k] = Y[min_idx]; Y[min_idx] = ty;\n}\n}\n}\n\n## Sposób 4 - sortowanie przez wstawianie (insertion sort)\n\ndla k = 2, , n wykonuj:\ni ← k\ndopóki i > 1 oraz X[i]/Y[i] < X[i-1]/Y[i-1] wykonuj:\nzamień X[i] z X[i-1]\nzamień Y[i] z Y[i-1]\ni ← i - 1\n\n**Pascal:**\n```pascal\nprocedure InsertionSort(var X, Y: array of LongInt; n: Integer);\nvar k, i, tx, ty: Integer;\nbegin\nfor k := 1 to n - 1 do begin\ni := k;\nwhile (i > 0) and (X[i] * Y[i-1] < X[i-1] * Y[i]) do begin\ntx := X[i]; X[i] := X[i-1]; X[i-1] := tx;\nty := Y[i]; Y[i] := Y[i-1]; Y[i-1] := ty;\ni := i - 1;\nend;\nend;\nend;\n\n## Reference informatyczny - sortowanie\n\n> Reference - Sortowanie bąbelkowe (bubble sort):\n> - Powtarza n-1 razy: porównuje sąsiadów i zamienia jeśli nieuporządkowani.\n> - **Złożoność**: O(n²) najgorszy/średni, O(n) najlepszy (z flagą \"swap\").\n> - **Pamięć**: O(1) dodatkowa (in-place).\n> - **Stabilność**: stabilny (nie zamienia równych).\n>\n> Reference - Sortowanie przez wybieranie (selection sort):\n> - W każdym przejściu wybiera minimum i zamienia z pozycją k.\n> - **Złożoność**: O(n²) zawsze.\n> - **Niestabilny** (zamiana minimum z pozycją k niszczy kolejność).\n>\n> Reference - Sortowanie przez wstawianie (insertion sort):\n> - Bierze kolejny element i wstawia go w odpowiednie miejsce wśród posortowanych.\n> - **Złożoność**: O(n²) najgorszy, O(n) najlepszy (dane już posortowane).\n> - **Stabilny**, **in-place**, **adaptywny**.\n>\n> Reference - Sortowanie z funkcją porównawczą (klucz):\n> - Zamiast `a[i] < a[j]` używamy `klucz(a[i]) < klucz(a[j])`.\n> - Tu: `klucz(i) = X[i] / Y[i]`.\n> - Synchronicznie zamieniamy WSZYSTKIE elementy powiązane z indeksem (tu X i Y).\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 2.2, max 4 pkt):\n> - **1 pkt** - poprawna konstrukcja zewnętrznej pętli sortowania\n> - **1 pkt** - poprawna konstrukcja wewnętrznej pętli\n> - **1 pkt** - poprawne porównanie elementów (iloraz X/Y)\n> - **1 pkt** - poprawna zamiana elementów uwzględniająca **OBA** X i Y\n>\n> **Uwaga: za algorytm o złożoności WIĘKSZEJ niż kwadratowa - maksymalnie 3 pkt.**\n\n## Typowe pułapki\n\n- **Zamiana tylko X bez Y** - strata 1 pkt. Synchronizacja par jest KRYTYCZNA.\n- **Zamiana tylko Y bez X** - j.w.\n- **Sortowanie po samym X** zamiast X/Y - błędna kolejność (np. D(-2,2) zaszedłby przed A(1,3), ale gdyby było C(2,1) i A(1,3), to A miało większe X niż źle).\n- **Złożoność O(n³)** - przy sortowaniu z dodatkową pętlą wewnątrz porównań. Strata 1 pkt.\n- **Użycie funkcji bibliotecznej `sorted()` / `qsort`** - **zabronione przez treść**.\n- **Off-by-one** w pętlach - pamiętaj o indeksowaniu od 1 w pseudokodzie.\n- **Niepoprawne zamiana** - bez zmiennej tymczasowej `t` można nadpisać wartości.\n\n## Złożoność obliczeniowa\n\n- **Czas**: O(n²) - dwie zagnieżdżone pętle do n.\n- **Pamięć**: O(1) dodatkowa (in-place, tylko zmienna `t` lub `min_idx`).\n- **Operacje porównania**: do n(n-1)/2.\n- **Operacje zamiany**: do n(n-1)/2 w bubble; do n-1 w selection.\n\nDla maksymalnej oceny (4 pkt) wystarcza kwadratowa - to jest mile widziane przez klucz CKE.","image":"img/informatyka-2018-maj-matura-rozszerzona/zad-2.2.webp","solution_image":null,"topics":null,"page_from":6,"source":"ocr","answer_source":null,"answer_text_source":"ocr","solution_source":"maturazai","text_source":"ocr","source_label":"Informatyka · Matura · maj 2018 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 2.2. (0-4)<br>Napisz algorytm (w pseudokodzie lub wybranym języku programowania), który przestawi<br>elementy tablic X i Y tak, aby szczyty były uporządkowane w kolejności, w której obserwator<br>widzi je od lewej do prawej strony. Aby otrzymać maksymalną ocenę, Twój algorytm powinien<br>mieć złożoność czasową kwadratową lub mniejszą.<br>Algorytm może używać wyłącznie instrukcji sterujących, operatorów arytmetycznych,<br>operatorów logicznych, porównań i przypisań do zmiennych. Zabronione jest używanie funkcji<br>bibliotecznych dostępnych w językach programowania.<br>Specyfikacja:<br>Dane:<br>n</p>\n<ul><li>liczba całkowita dodatnia</li></ul>\n<p>X[1 n] - tablica liczb całkowitych<br>Y[1 n] - tablica liczb całkowitych dodatnich<br>Para (X[i], Y[i]) to współrzędne jednego szczytu, i = 1, 2, …, n.<br>Żadne dwa szczyty nie leżą w jednej linii z obserwatorem.<br>Wynik:<br>X[1 n], Y[1 n] - tablice zawierające współrzędne danych szczytów, uporządkowanych<br>w kolejności, w której obserwator widzi je od lewej do prawej strony.<br>Algorytm<br>MIN_1R</p>","answer_text_html":"<p>Zadanie 2.2. (0-4)<br>Wymagania ogólne<br>Wymagania szczegółowe<br>III. Rozwiązywanie problemów<br>i podejmowanie decyzji […] z zastosowaniem<br>podejścia algorytmicznego.</p>\n<ol><li>Rozwiązywanie problemów</li></ol>\n<p>i podejmowanie decyzji […], stosowanie<br>podejścia algorytmicznego.<br>Zdający:</p>\n<ol><li>analizuje, modeluje i rozwiązuje sytuacje</li></ol>\n<p>problemowe z różnych dziedzin;</p>\n<ol><li>stosuje podejście algorytmiczne do</li></ol>\n<p>rozwiązywania problemu;</p>\n<ol><li>dobiera efektywny algorytm do</li></ol>\n<p>rozwiązania sytuacji problemowej<br>i zapisuje go w wybranej notacji;</p>\n<ol><li>posługuje się podstawowymi technikami</li></ol>\n<p>algorytmicznymi;</p>\n<ol><li>opisuje podstawowe algorytmy</li></ol>\n<p>i stosuje:<br>b) algorytmy wyszukiwania<br>i porządkowania (sortowania), np.:</p>\n<ul><li>algorytmy sortowania ciągu liczb:</li></ul>\n<p>bąbelkowy, przez wybór, przez wstawianie<br>liniowe lub binarne, przez scalanie, szybki,<br>kubełkowy.<br>Schemat punktowania<br>4 p. - za poprawny algorytm, w tym:<br>1 p. - za poprawną konstrukcję zewnętrznej pętli algorytmu sortowania,<br>1 p. - za poprawną konstrukcję wewnętrznej pętli algorytmu sortowania,<br>1 p. - za poprawne porównanie elementów,<br>1 p. - za poprawną zamianę elementów uwzględniającą zarówno X, jak i Y.<br>Uwaga: za prawidłowe rozwiązanie o złożoności większej niż kwadratowa - maksymalnie 3<br>punkty,<br>0 p. - za podanie odpowiedzi błędnej albo brak odpowiedzi.<br>Uwaga: za każde inne niż przedstawione niżej, ale całkowicie poprawne rozwiązanie<br>przyznajemy maksymalną liczbę punktów.<br>Przykładowe rozwiązania<br>Przykładowe rozwiązanie 1. (sortowanie bąbelkowe):<br>powtarzaj n-1 razy:<br>dla i = 1, 2, , n-1<br>jeżeli X[i+1]/Y[i+1] &lt; X[i]/Y[i]<br>t = X[i]<br>X[i] = X[i+1]<br>X[i+1] = t<br>t = Y[i]<br>Y[i] = Y[i+1]<br>Y[i+1] = t<br>Przykładowe rozwiązanie 2. (sortowanie przez wybór):<br>dla i = 1, 2, , n-1:<br>m = i<br>dla j = i+1, i+2, , n<br>jeżeli X[j]/Y[j] &lt; X[m]/Y[m]<br>m = j<br>t = X[i]<br>X[i] = X[m]<br>X[m] = t<br>t = Y[i]<br>Y[i] = Y[m]<br>Y[m] = t<br>Przykładowe rozwiązanie 3. (sortowanie przez wstawianie):<br>dla i = 2, 3, , n:<br>j = i<br>dopóki j&gt;1 oraz X[j]/Y[j]&lt;X[j-1]/Y[j-1]:<br>t = X[j]<br>X[j] = X[j-1]<br>X[j-1] = t<br>t = Y[j]<br>Y[j] = Y[j-1]<br>Y[j-1] = t<br>j = j-1</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Algorytm - sortowanie bąbelkowe (bubble sort) wg ilorazu X[i]/Y[i]:</strong></p>\n<p>powtarzaj n-1 razy:<br>dla i = 1, 2, , n-1 wykonuj:<br>jeżeli X[i+1]/Y[i+1] &lt; X[i]/Y[i]:<br>t ← X[i]<br>X[i] ← X[i+1]<br>X[i+1] ← t<br>t ← Y[i]<br>Y[i] ← Y[i+1]<br>Y[i+1] ← t</p>\n<h4>Sposób 1 - sortowanie bąbelkowe</h4>\n<p><strong>Idea:</strong> w każdym przejściu &quot;bąbel&quot; (największy nieuporządkowany element) wędruje na koniec. Powtarzając n-1 razy, mamy gwarancję pełnego posortowania.</p>\n<p><strong>Klucz porównania:</strong> <code>X[i]/Y[i]</code> (kąt nachylenia od obserwatora).</p>\n<p><strong>Zamiana par (X[i], Y[i]) ↔ (X[i+1], Y[i+1])</strong> - zamieniamy OBIE tablice synchronicznie.</p>\n<h4>Sposób 2 - implementacja Python</h4>\n<p>```python<br>def sortuj_szczyty(X, Y):<br>n = len(X)<br>for k in range(n - 1):<br>for i in range(n - 1 - k): # optymalizacja: ostatnie k jest posortowane<br>if X[i+1] / Y[i+1] &lt; X[i] / Y[i]:<br>X[i], X[i+1] = X[i+1], X[i]<br>Y[i], Y[i+1] = Y[i+1], Y[i]<br>return X, Y</p>\n<p>X = [3, -2, 2, 1]<br>Y = [4, 2, 1, 3]<br>print(sortuj_szczyty(X, Y))</p>\n<h3>Posortowane: D(-2,2), A(1,3), B(3,4), C(2,1)</h3>\n<h3>X = [-2, 1, 3, 2], Y = [2, 3, 4, 1]</h3>\n<h4>Sposób 3 - sortowanie przez wybieranie (selection sort)</h4>\n<p>Alternatywa - w każdym przejściu wybieramy minimum z reszty i wymieniamy z pozycją k:</p>\n<p>dla k = 1, 2, , n-1 wykonuj:<br>min_idx ← k<br>dla i = k+1, , n wykonuj:<br>jeżeli X[i]/Y[i] &lt; X[min_idx]/Y[min_idx]:<br>min_idx ← i<br>zamień X[k] z X[min_idx]<br>zamień Y[k] z Y[min_idx]</p>\n<p><strong>C++ (selection sort):</strong><br>```cpp<br>void sortuj(int X[], int Y[], int n) {<br>for (int k = 0; k &lt; n - 1; k++) {<br>int min_idx = k;<br>for (int i = k + 1; i &lt; n; i++) {<br>// X[i]/Y[i] &lt; X[min_idx]/Y[min_idx]<br>if ((long long)X[i] * Y[min_idx] &lt; (long long)X[min_idx] * Y[i]) {<br>min_idx = i;<br>}<br>}<br>if (min_idx != k) {<br>int tx = X[k]; X[k] = X[min_idx]; X[min_idx] = tx;<br>int ty = Y[k]; Y[k] = Y[min_idx]; Y[min_idx] = ty;<br>}<br>}<br>}</p>\n<h4>Sposób 4 - sortowanie przez wstawianie (insertion sort)</h4>\n<p>dla k = 2, , n wykonuj:<br>i ← k<br>dopóki i &gt; 1 oraz X[i]/Y[i] &lt; X[i-1]/Y[i-1] wykonuj:<br>zamień X[i] z X[i-1]<br>zamień Y[i] z Y[i-1]<br>i ← i - 1</p>\n<p><strong>Pascal:</strong><br>```pascal<br>procedure InsertionSort(var X, Y: array of LongInt; n: Integer);<br>var k, i, tx, ty: Integer;<br>begin<br>for k := 1 to n - 1 do begin<br>i := k;<br>while (i &gt; 0) and (X[i] * Y[i-1] &lt; X[i-1] * Y[i]) do begin<br>tx := X[i]; X[i] := X[i-1]; X[i-1] := tx;<br>ty := Y[i]; Y[i] := Y[i-1]; Y[i-1] := ty;<br>i := i - 1;<br>end;<br>end;<br>end;</p>\n<h4>Reference informatyczny - sortowanie</h4>\n<blockquote>Reference - Sortowanie bąbelkowe (bubble sort):<br>- Powtarza n-1 razy: porównuje sąsiadów i zamienia jeśli nieuporządkowani.<br>- <strong>Złożoność</strong>: O(n²) najgorszy/średni, O(n) najlepszy (z flagą &quot;swap&quot;).<br>- <strong>Pamięć</strong>: O(1) dodatkowa (in-place).<br>- <strong>Stabilność</strong>: stabilny (nie zamienia równych).<br><br>Reference - Sortowanie przez wybieranie (selection sort):<br>- W każdym przejściu wybiera minimum i zamienia z pozycją k.<br>- <strong>Złożoność</strong>: O(n²) zawsze.<br>- <strong>Niestabilny</strong> (zamiana minimum z pozycją k niszczy kolejność).<br><br>Reference - Sortowanie przez wstawianie (insertion sort):<br>- Bierze kolejny element i wstawia go w odpowiednie miejsce wśród posortowanych.<br>- <strong>Złożoność</strong>: O(n²) najgorszy, O(n) najlepszy (dane już posortowane).<br>- <strong>Stabilny</strong>, <strong>in-place</strong>, <strong>adaptywny</strong>.<br><br>Reference - Sortowanie z funkcją porównawczą (klucz):<br>- Zamiast <code>a[i] &lt; a[j]</code> używamy <code>klucz(a[i]) &lt; klucz(a[j])</code>.<br>- Tu: <code>klucz(i) = X[i] / Y[i]</code>.<br>- Synchronicznie zamieniamy WSZYSTKIE elementy powiązane z indeksem (tu X i Y).</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 2.2, max 4 pkt):<br>- <strong>1 pkt</strong> - poprawna konstrukcja zewnętrznej pętli sortowania<br>- <strong>1 pkt</strong> - poprawna konstrukcja wewnętrznej pętli<br>- <strong>1 pkt</strong> - poprawne porównanie elementów (iloraz X/Y)<br>- <strong>1 pkt</strong> - poprawna zamiana elementów uwzględniająca <strong>OBA</strong> X i Y<br><br><strong>Uwaga: za algorytm o złożoności WIĘKSZEJ niż kwadratowa - maksymalnie 3 pkt.</strong></blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Zamiana tylko X bez Y</strong> - strata 1 pkt. Synchronizacja par jest KRYTYCZNA.</li><li><strong>Zamiana tylko Y bez X</strong> - j.w.</li><li><strong>Sortowanie po samym X</strong> zamiast X/Y - błędna kolejność (np. D(-2,2) zaszedłby przed A(1,3), ale gdyby było C(2,1) i A(1,3), to A miało większe X niż źle).</li><li><strong>Złożoność O(n³)</strong> - przy sortowaniu z dodatkową pętlą wewnątrz porównań. Strata 1 pkt.</li><li><strong>Użycie funkcji bibliotecznej <code>sorted()</code> / <code>qsort</code></strong> - <strong>zabronione przez treść</strong>.</li><li><strong>Off-by-one</strong> w pętlach - pamiętaj o indeksowaniu od 1 w pseudokodzie.</li><li><strong>Niepoprawne zamiana</strong> - bez zmiennej tymczasowej <code>t</code> można nadpisać wartości.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li><strong>Czas</strong>: O(n²) - dwie zagnieżdżone pętle do n.</li><li><strong>Pamięć</strong>: O(1) dodatkowa (in-place, tylko zmienna <code>t</code> lub <code>min_idx</code>).</li><li><strong>Operacje porównania</strong>: do n(n-1)/2.</li><li><strong>Operacje zamiany</strong>: do n(n-1)/2 w bubble; do n-1 w selection.</li></ul>\n<p>Dla maksymalnej oceny (4 pkt) wystarcza kwadratowa - to jest mile widziane przez klucz CKE.</p>"}]}