Задать вопрос
logicface
@logicface
Начинающий

Почему алгоритм работает не совсем правильно из-за финальной проверки?

Всем привет. Я новичок. Пытался и хотел создать свой алгоритм сортировки. Не знаю какая тут сложность и хороший ли он, но меня мучит другой вопрос — почему последние 3 цифры не сортируются в этом виде проверки (где второй if). Ведь там 23 сравнивается с 5 и 23 не меньше 5 а все равно срабатывает как true. Если эту проверку чуток переделать (второй код), то все заработает. Но я не понимаю почему так происходит. Гуру алгоритмики — подскажите в чем дело если вам не лень копаться в этом.

let arr = [5, 1, 2, 4, 21, 5, 21, 3]

const sort = arr => {
	let checker = true
	do {
		arr.forEach((item, index, arr) => {
			if (item > arr[index + 1]) {
				arr.splice(index, 2, arr[index + 1], arr[index])
			}
		})

		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 < index.length ? item <= arr[index + 1] : true // Из-за этой проверки не работает (ниже пример ее переделки на то что работает)
			})
		) {
			checker = false
		}
	} while (checker)
	return arr
}

console.log(sort(arr)) // 1, 2, 4, 5, 5, 21, 3, 21


Переделка:

return index > 0 ? item >= arr[index - 1] : true // Переделка
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
XanXanXan
@XanXanXan
index.length

arr.length - 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы