Сегодня я хочу поговорить о первом виду, что я узнал, пузырь. Подходы к сортировке массивов называются таким образом, чтобы они иллюстрируют то, что они делают.
Bubble Sort посмотрите на текущее значение и следующее значение в массиве, когда вы выполняете через него. Если во время вашей итерации вы обнаружите, что у вас есть текущее значение, превышающее ваше следующее значение, необходимо поменять на эти значения.
Не замена недостаточно, потому что нам нужно создать что-то называемое Sentinel Value. . Какое значение Sentinel имеет отношение к тому, что он действует как хранитель ворот. Он контролирует поток вашей петли такой, что вам нужно продолжить цикл, пока оно верно или нет, в зависимости от того, как вы закодировали свой вид.
Так что давайте посмотрим на код:
Проходя каждую строку кода Первое, что мы замечаем, заключается в том, что функция принимает массив в качестве параметра. Дух!
Следующая вещь, которую мы объявили в нашей функции, это значение, помеченная Торговля который является нашей ценностью Sentinel. Мы инициализируем эту переменную в качестве ложного значения, что никакие сделки (свопы) не произошло. Далее мы собираемся объявить переменную маркировку Считать Что просто собирается отследить, сколько раз мы итерация через массив. Это особенно важно, и мне потребовалось некоторое время, чтобы понять, что мы будем использовать это, чтобы уменьшить длину массива, когда мы повторяем его снова. Почему мы это делаем… Я объясню это в ближайшее время.
Теперь для фактической итерации. Итерация через массив будет вложен в цикл While. В то время как петли проходят до тех пор, пока параметр набора параметров в их скобках больше не верно.
Внутри цикл в то время как наше условие – наше ценность нюнеля. Мы говорим, что, в то время как торговля является ложным или когда значения не были проданы, мы можем продолжить нашу цикл. Вложенность A для цикла внутри A пока цикл дает нам временную сложность O (n 2 ). У нас есть космическая сложность O (1), хотя, поскольку мы не требуем больше места для сортировки.
Теперь может показаться, что странно, чтобы немедленно переназначить торговую стоимость, но причина, по которой мы делаем это, это то, что в том случае, если мы повторяем, и мы не делаем никаких свопом, истинное значение позволит нам избежать нашего цикла.
Теперь мы повторяемся через наш массив, объявляя I как 0, чтобы начать с индекса массива, состояние остановки – это если мы достигнем 1 меньше, чем длина массива, но подожди … минус счет? Я упомянул об этом ранее и причина, по которой мы делаем это, это то, что если мы сортируем и принимаем большие значения до конца, то мы можем ожидать, что нам не нужно повторять полную длину массива каждый раз, когда мы закончимся Итализация по большим значениям в конце, которые уже отсортированы. Опять же, это заняло у меня секунду или двадцать, чтобы понять. Наконец, я ++, потому что просто мы проходим через индексы массива по одному за раз.
Наш условный чек! Если текущее значение больше, чем следующее значение, пришло время сделать сделку! Создайте переменную и назначьте ее значение текущего значения. Почему? Мы делаем это, потому что мы собираемся потерять доступ к этой ценности, поэтому мы должны хранить его. Хорошо, переназначить, то текущее значение должно быть следующим значением в массиве. Теперь назначьте следующее значение в массиве, чтобы быть текущим, который мы объявили только моменты назад. Мы назначаем торговлю стоимостью FALSE, чтобы продолжать оставаться в объеме нашего цикла. Теперь мы можем продолжать итерацию и поменяться там, где это необходимо. Когда мы заканчиваем одну итерацию нашего массива, мы увеличиваем количество на один, который позволит нам уменьшить длину массива, который нам нужно повторить.
Если и когда мы повторяемся через массив, и никакие значения не были обменены, мы выберем из нашего цикла. Это было довольно путешествие, но не забудьте вернуть массив, чтобы завершить этот алгоритм!
Оригинал: “https://dev.to/esaldivar/algorithm-approach-bubble-sort-13oi”