KWALIFIKACJA INF2 + INF3 - CZERWIEC 2010

PYTANIE NR 29.
Na zamieszczonym fragmencie kodu programu napisanego w języku C++ ustawianie elementów tablicy odbywa się za pomocą sortowania (UWAGA: W kodzie programu występują błędy)
Ilustracja przedstawia fragment kodu programu napisanego w języku C++.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Sortowanie bąbelkowe rozpoznasz po tym, że w zagnieżdżonych pętlach porównywane są sąsiednie elementy tablicy (tab[i] i tab[i+1]) i w razie złej kolejności następuje ich zamiana przez zmienną pomocniczą temp. Błędy składni nie zmieniają wzorca algorytmu.

Pełne wyjaśnienie:

W przedstawionym fragmencie kodu widać typowy schemat sortowania bąbelkowego (bubble sort). Kluczowy wyróżnik to porównywanie sąsiednich elementów tablicy: warunek w postaci tab[i] > tab[i+1] sprawdza, czy para stojąca obok siebie jest w złej kolejności. Gdy tak jest, elementy są zamieniane miejscami z użyciem zmiennej pomocniczej temp.

Drugi charakterystyczny element to dwie pętle zagnieżdżone: pętla zewnętrzna wykonuje kolejne przebiegi, a pętla wewnętrzna przechodzi przez nieposortowany fragment. Po każdym pełnym przebiegu największa (dla sortowania rosnącego) wartość "wypływa" na koniec rozpatrywanego zakresu, co jest intuicją stojącą za nazwą "bąbelkowe".

Dlaczego pozostałe odpowiedzi nie pasują?

  • "przez wstawianie" – w tym algorytmie buduje się posortowaną część, biorąc kolejny element i wstawiając go w odpowiednie miejsce (często z przesuwaniem wielu elementów). Nie ma tu typowego porównania par sąsiednich w pełnym przebiegu ani prostego swapu tylko dla sąsiadów.
  • "przez wybór" – cechą jest wyszukanie minimum/maksimum w nieposortowanej części i pojedyncza zamiana z początkiem/końcem zakresu. W kodzie nie ma wyszukiwania skrajnej wartości; jest za to wiele lokalnych porównań sąsiadów.
  • "szybkiego" – quicksort bazuje na pivocie, partycjonowaniu i zwykle rekurencji/wywołaniach dzielących problem na podproblemy. W tym fragmencie nie widać ani partycjonowania, ani rekurencji.

Uwaga o błędach składniowych: użycie operatora := byłoby błędem w C++, bo standardowo przypisanie zapisuje się jako =. Jednak nawet przy takim błędzie logika algorytmu (pętle, porównanie sąsiadów, zamiana przez temp) pozostaje jednoznaczna.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Sortowanie bąbelkowe to prosty algorytm porównaniowy, w którym wielokrotnie porównuje się pary sąsiednich elementów i zamienia je miejscami, jeśli są w złej kolejności. Po każdym przebiegu największy element przesuwa się na koniec zakresu, jak "bąbelek" w górę.
Szukaj wzorca: dwie pętle (często zagnieżdżone), warunek porównujący sąsiednie elementy (np. tab[i] i tab[i+1]) oraz blok zamiany z użyciem zmiennej pomocniczej (temp). Ten zestaw cech jest najbardziej charakterystyczny.
Porównanie sąsiadów pozwala wykonywać lokalne poprawki kolejności: gdy para jest odwrócona, jednorazowa zamiana przybliża elementy do właściwych pozycji. Powtarzanie przebiegów powoduje, że skrajne wartości stopniowo "wędrują" na koniec/początek tablicy.
W bąbelkowym wykonuje się wiele lokalnych porównań sąsiadów i wiele zamian w jednym przebiegu. W sortowaniu przez wybór w każdej iteracji wyszukuje się minimum/maksimum w nieposortowanej części i zwykle wykonuje tylko jedną zamianę z początkiem/końcem zakresu.
Klasyczna wersja bubble sort ma złożoność czasową O(n²), bo dla n elementów wykonuje się zagnieżdżone przebiegi porównań. Dlatego algorytm jest dobry dydaktycznie, ale nieopłacalny dla dużych zbiorów danych w zastosowaniach produkcyjnych.
Tak. Jeśli widać strukturę pętli, warunek i sposób modyfikacji danych, można rozpoznać algorytm mimo literówek lub złych operatorów. Na egzaminie często sprawdza się rozumienie logiki, a nie tylko poprawność składni pojedynczej instrukcji.
Zapis := jest typowy dla niektórych języków (np. Pascal) jako operator przypisania. W C++ przypisanie wykonuje się operatorem =. Użycie := w C++ spowoduje błąd kompilacji, ale nie przekreśla możliwości odczytania intencji kodu.
Często myli się bubble sort z insertion sort (bo oba są O(n²)) albo z selection sort (bo też są dwie pętle). Pułapka polega na pomijaniu detalu: bubble rozpoznaje się po porównaniu sąsiadów i zamianie tab[i] z tab[i+1].
Nie warto go używać przy większych danych, gdy liczy się wydajność. O(n²) oznacza szybki wzrost liczby operacji wraz z n. W praktyce stosuje się zwykle szybsze metody (np. quicksort/mergesort) lub gotowe sortowanie z bibliotek standardowych.
Ćwicz rozpoznawanie "wzorców" kodu: pętle zagnieżdżone, porównanie sąsiadów, wyszukiwanie minimum, pivot i rekurencja. Pomaga też ręczne prześledzenie 1–2 przebiegów na małej tablicy oraz notowanie, jakie elementy zmieniają pozycję po każdej iteracji.
info

Statystycznie 44% uczniów zna prawidłową odpowiedź. trudne

Specjaliści zwracają uwagę: "Błędy składni nie zmieniają wzorca algorytmu."

Źródła:

  • Wikipedia (PL) – "Sortowanie bąbelkowe", https://pl.wikipedia.org/wiki/Sortowanie_b%C4%85belkowe - dostęp 2026-02-27
  • GeeksforGeeks – "Bubble Sort Algorithm", https://www.geeksforgeeks.org/bubble-sort-algorithm/ - dostęp 2026-02-27
  • cppreference.com – "Assignment operator (=)", https://en.cppreference.com/w/cpp/language/operator_assignment - dostęp 2026-02-27

Materiały:

  • Podręczniki i skrypty do podstaw algorytmów (rozdziały o sortowaniach porównaniowych)
  • Dokumentacja i tutoriale C++ dotyczące tablic, pętli i instrukcji warunkowych
  • Ćwiczenia: ręczne prześledzenie działania bubble sort na małej tablicy (trace krok po kroku)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego