В среднем каждая вставка должна пересекать половину отсортированного списка, делая одно сравнение за шаг. Список растет каждый раз.
Итак, начиная со списка длины 1 и вставляя первый элемент, чтобы получить список длины 2, мы имеем средний обход .5 (0 или 1) мест. Остальные - 1.5 (0, 1 или 2 место), 2.5, 3.5, ..., n-.5 для списка длины n + 1.
Это простая алгебра, 1 + 2 + 3 + ... + n - n * .5 = (n (n + 1) - n)/2 = n^2/2 = O (n^2)
Обратите внимание, что это средний случай. В худшем случае список должен быть полностью пройден (вы всегда вставляете следующий наименьший элемент в восходящий список). Тогда у вас есть 1 + 2 + ... n, который все еще O (n^2).
В лучшем случае вы найдете точку вставки в верхнем элементе с одним компартом, поэтому у вас есть 1 + 1 + 1 + (n раз) = O (n).
Написание математического доказательства самостоятельно только укрепит ваше понимание. Часто самые сложные части - это на самом деле настройка. Например, сначала вы должны уточнить, хотите ли вы наихудшую сложность алгоритма или что-то еще (например, сложность среднего размера). Во-вторых, вы хотите определить, что считается фактической операцией в вашем анализе. Для алгоритмов сортировки на основе сравнения, таких как сортировка вставки, обычно мы определяем сравнения, чтобы принимать «O (1)» время и свопы, чтобы взять «O (1)» время. Вы можете оправдать себя, является ли это допустимой метрикой. С этого момента просто примените определение – rliu