πŸ“– ДокумСнтация Qumir

← Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Playground

← ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ

На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт срСди нСотсортированных ΠΈ ставим Π΅Π³ΠΎ Π½Π° своё мСсто.

ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

  1. Π˜Ρ‰Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт Π²ΠΎ всём массивС, ставим Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мСсто
  2. Π˜Ρ‰Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ срСди ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ, ставим Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ мСсто
  3. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌ, ΠΏΠΎΠΊΠ° массив Π½Π΅ отсортирован

Π Π°Π·Π±ΠΎΡ€

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ»

Π½Ρ† для i ΠΎΡ‚ 0 Π΄ΠΎ n - 2
    min_i := i
    ...
ΠΊΡ†

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ i β€” позиция, ΠΊΡƒΠ΄Π° ΠΌΡ‹ поставим ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ. НачинаСм с прСдполоТСния, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ находится Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ i.

Поиск ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°

Π½Ρ† для j ΠΎΡ‚ i + 1 Π΄ΠΎ n - 1
    Ссли A[j] < A[min_i] Ρ‚ΠΎ
        min_i := j
    всС
ΠΊΡ†

ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ всС элСмСнты ΠΏΡ€Π°Π²Π΅Π΅ i. Если нашли элСмСнт мСньшС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° β€” Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Π΅Π³ΠΎ индСкс Π² min_i.

ОбмСн

Ссли min_i <> i Ρ‚ΠΎ
    tmp := A[i]
    A[i] := A[min_i]
    A[min_i] := tmp
всС

Если ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π΅ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ i β€” мСняСм ΠΈΡ… мСстами.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: $O(n^2)$. Π”Π΅Π»Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² (Π½Π΅ Π±ΠΎΠ»Π΅Π΅ $n - 1$), Π½ΠΎ всСгда выполняСт $O(n^2)$ сравнСний.

Полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π°Π»Π³ main(Ρ†Π΅Π» n)
Π½Π°Ρ‡
    Ссли n <= 0 Ρ‚ΠΎ
        Π²Ρ‹Π²ΠΎΠ΄ "Π Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ", нс
        Π²Ρ‹Ρ…ΠΎΠ΄
    всС

    Ρ†Π΅Π» Ρ‚Π°Π± A[0:n-1]
    Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ_случайными(n, A)

    Π²Ρ‹Π²ΠΎΠ΄ "Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ массив:", нс
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ_массива(n, A)

    selectionsort(n, A)

    Π²Ρ‹Π²ΠΎΠ΄ "ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ массив:", нс
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ_массива(n, A)
ΠΊΠΎΠ½

Π°Π»Π³ selectionsort(Ρ†Π΅Π» n, Ρ†Π΅Π» Ρ‚Π°Π± A[0:n-1])
Π½Π°Ρ‡
    Ρ†Π΅Π» i, j, min_i, tmp
    Π½Ρ† для i ΠΎΡ‚ 0 Π΄ΠΎ n - 2
        min_i := i
        Π½Ρ† для j ΠΎΡ‚ i + 1 Π΄ΠΎ n - 1
            Ссли A[j] < A[min_i] Ρ‚ΠΎ
                min_i := j
            всС
        ΠΊΡ†
        Ссли min_i <> i Ρ‚ΠΎ
            tmp := A[i]
            A[i] := A[min_i]
            A[min_i] := tmp
        всС
    ΠΊΡ†
ΠΊΠΎΠ½

Π°Π»Π³ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ_случайными(Ρ†Π΅Π» n, Ρ†Π΅Π» Ρ‚Π°Π± A[0:n-1])
Π½Π°Ρ‡
    Ρ†Π΅Π» i
    Π½Ρ† для i ΠΎΡ‚ 0 Π΄ΠΎ n - 1
        A[i] := irnd(100)
    ΠΊΡ†
ΠΊΠΎΠ½

Π°Π»Π³ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ_массива(Ρ†Π΅Π» n, Ρ†Π΅Π» Ρ‚Π°Π± A[0:n-1])
Π½Π°Ρ‡
    Ρ†Π΅Π» i
    Π½Ρ† для i ΠΎΡ‚ 0 Π΄ΠΎ n - 1
        Π²Ρ‹Π²ΠΎΠ΄ A[i], " "
    ΠΊΡ†
    Π²Ρ‹Π²ΠΎΠ΄ нс
ΠΊΠΎΠ½

β–Ά Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€