Покажите код
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]
ключевая идея
Сложная часть этого алгоритма:
-
Определите переменную
currentIdx
, которая является индексом, с которым будет сравниваться последний. -
Второй вложенный цикл for будет иметь индекс
j
и сравниваться сcurrentIdx
. -
Поскольку
currentIdx
уже присвоен текущему индексу,i
, поэтомуj
будетj-1
, предыдущий, который мы хотим сравнить. -
Мы сравниваем два числа бок о бок. Это часть того, как работает данный алгоритм.
-
Наконец, когда условие совпадает (то есть
arr[currentIdx] < arr[j]
), мы меняемся местами и нам нужно динамически перепривязатьcurrentIdx
кj
. Это основная часть алгоритма, который будет находить место предыдущего индекса и менять их местами (или «вставлять»). -
Совет: Попробуйте погуглить «insert sort animation» и получить визуальное представление о том, как происходит алгоритм.