Написанная вами функция является реализацией техники сортировки, известной как пузырьковая сортировка.Он просто сравнивает соседние элементы для сортировки списка.
Хотя вам не обязательно останавливать второй цикл for на size - x - 1
итерациях, это помогает уменьшить количество выполняемых сравнений, повышая тем самым эффективность алгоритма, уже имеющего временную сложность порядкаиз п ^ 2, который плохо работает в больших списках.
Если вы проследите выполнение, вы поймете, что после каждой итерации внешнего цикла еще один элемент достигает того места, где он будет находиться в отсортированном массиве, и лучше не учитывать этот элемент в последующихитераций.
Таким образом, ваша программа рано останавливает внутренний цикл, зная, что последние элементы x
уже отсортированы.
Когда дело доходит до логического значения, оно еще больше уменьшает сравнение, которое вы выполняете.Например, когда вы передаете отсортированный список: На первой итерации внешнего цикла, x = 0
.Затем внутренний цикл выполняет итерацию size - 1
раз, сравнивая соседние элементы, но не выполняет обмен, так как элементы уже в порядке.Как только внутренний цикл завершает все итерации для первой итерации внешнего цикла (x = 0
), бессмысленно идти на дальнейшие итерации и лучше останавливать алгоритм в этой точке.Оператор break гарантирует, что это произойдет.
Таким образом, в лучшем случае временная сложность вашего алгоритма будет порядка n (O(n)
), что лучше, чем средняя или наихудшая сложность O(n^2)