При анализе временной сложности алгоритма я на самом деле считаю полезным не смотреть на код, а вместо этого думать об основной идее, лежащей в основе алгоритма. Если вы концептуально знаете, что делает алгоритм, часто проще вычислить временную сложность, просто обдумав, что алгоритм собирается делать, а затем получив временную сложность оттуда.
Давайте применим этот подход здесь. Итак, как именно работает сортировка выбором? Ну, он начинается с поиска минимального значения в последних n элементах и замены его на позицию 0, затем находит минимальное значение в последних n - 1 элементах и заменяет его на позицию 1, затем находит минимальное значение в последних n - 2 элемента и перестановка его на позицию 2 и т.д.
«Сложной частью» алгоритма является определение того, какой из последних n-k элементов является наименьшим. Сортировка выбором делает это, перебирая эти элементы и сравнивая каждый с элементом, который в настоящее время известен как наименьший. Это требует n - k - 1 сравнений.
Посмотрим, сколько здесь сравнений. На первой итерации нам нужно сделать n - 1 сравнение. На второй итерации мы делаем n - 2 сравнения. На третьем делаем n - 3 сравнения. Суммируя количество сравнений, мы получаем хороший способ измерения общей работы:
(n - 1) + (n - 2) + (n - 3) + ... + 3 + 2 + 1 = n(n - 1) / 2
Это известное суммирование — его стоит запомнить — оно говорит нам, сколько сравнений требуется. Количество выполненных сравнений является отличным показателем общего объема проделанной работы. Поскольку выполнено n(n - 1) / 2 = n2 / 2 - n / 2 = (n2) сравнений, временная сложность сортировки выбором равна ( п2).
person
templatetypedef
schedule
27.08.2015
N-1, N-2, N-3...1
. Теперь сложите их и посмотрите на это доказательство а>. РезультатN(N+1)/2 - N
, что составляетO(N^2)
сложности. Также стоит прочитать описание алгоритма. - person WhozCraig   schedule 19.02.2015