\documentclass[spec, och, labwork]{SCWorks}
\usepackage{preamble}

\begin{document}
\include{titlepage.tex}

\section*{Описание работы алгоритма}

На $i$-м шаге выполнения алгоритма необходимо найти некоторый $k$-й наименьший
элемент, где $i < k \leq n$, $n$ "--- размер массива. После того, как $k$-й
элемент был найден необходимо поменять его местами с $i$-м элементом.

Данный алгоритм необходимо повторить для каждого элемента массива. Таким образом
будет получен массив, отсортированный по неубыванию.

\subsection*{Оценка сложности}

Нахождение минимального элемента в массиве требует проверки $n$ элементов
($n - 1$ сравнений). Нахождение следующего минимального элемента потребует
проверки $n - 1$ элементов ($n - 2$ сравнений). Таким образом, всего будет
произведено следующее количество сравнений:
\[ (n - 1) + (n - 2) + \ldots + 1 = \sum_{i = 1}^{n - 1} i \]

Преобразуя данное выражение, получим
\begin{equation*}
    \sum_{i = 1}^{n - 1} i = \frac{(n - 1) + 1}{2} (n - 1) =
    \frac{1}{2} n (n - 1) = \frac{1}{2} (n^2 - n)
\end{equation*}

Таким образом получаем, что алгоритм сортировки с помощью прямого выбора имеет
алгоритмическую сложность $O(n^2)$ в среднем, лучшем и худшем случаях.

\subsection*{Реализация на языке C++}

\inputminted[fontsize=\small, breaklines=true, style=bw, linenos]{c}{../../straight-selection.cpp}

\end{document}
