Потренируемся вставлять сортировку (Javascript)


Покажите код

let data = [8, 6, 10, 5, 3, 9, 2, 7, 4, 1]

function InsertSort(arr) {
    for (let i = 0; i < arr.length; i++) {
        let currentIdx = i
        for (let j = i - 1; j >= 0; j--) {
            if (arr[currentIdx] < arr[j]) {
                [arr[currentIdx], arr[j]] = [arr[j], arr[currentIdx]]
                currentIdx = j
            }
        }
    }

    return arr


}
console.log(InsertSort(data))//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Вход в полноэкранный режим Выйти из полноэкранного режима

ключевая идея

Сложная часть этого алгоритма:

  1. Определите переменную currentIdx, которая является индексом, с которым будет сравниваться последний.

  2. Второй вложенный цикл for будет иметь индекс j и сравниваться с currentIdx.

  3. Поскольку currentIdx уже присвоен текущему индексу, i, поэтому j будет j-1, предыдущий, который мы хотим сравнить.

  4. Мы сравниваем два числа бок о бок. Это часть того, как работает данный алгоритм.

  5. Наконец, когда условие совпадает (то есть arr[currentIdx] < arr[j]), мы меняемся местами и нам нужно динамически перепривязать currentIdx к j. Это основная часть алгоритма, который будет находить место предыдущего индекса и менять их местами (или «вставлять»).

  6. Совет: Попробуйте погуглить «insert sort animation» и получить визуальное представление о том, как происходит алгоритм.

Оцените статью
devanswers.ru
Добавить комментарий