Почему завершающая проверка в алгоритме приводит к неправильным результатам?

  • 30 августа 2023 г. 21:26
Ответы на вопрос 3
Проблема вашего кода заключается в ошибке в условии проверки во втором условном операторе `if (arr.every((item, index) => { ... }))`. 

В вашей текущей реализации, вы используете `index.length` вместо `arr.length` в условии, что приводит к некорректному сравнению. В результате, условие `index < index.length` всегда будет возвращать `true`, потому что `index` является числом (индексом), а у него нет свойства `length`.

Верное условие должно быть следующим: `return index < arr.length - 1 ? item <= arr[index + 1] : true`. 

Таким образом, в вашем коде, измененное условие будет выглядеть следующим образом:

```javascript
if (
  arr.every((item, index) => {
    console.log(item); // 1, 2, 4, 5, 5, 21, 3, 21
    console.log(arr[index + 1]); // 2, 4, 5, 5, 21, 3, 21, undefined
    return index < arr.length - 1 ? item <= arr[index + 1] : true
  })
) {
  checker = false
}
```

После этого изменения, ваш алгоритм сортировки должен работать корректно.
index.lengtharr.length - 1 
  Получить индекс последнего элемента массива.
Похожие вопросы