Смотрите, подаём на вход массив [1, 2, 3]
fundam = Math.round(3 / 2) = 2.
arr[2] = 3
less = [1, 2, 3], так как в него попадают все элементы, меньшие
или равные 3
greater = []
И снова вызываем сортировку массива [1, 2, 3]. Всё повторяется заново. При этом само число 3 будет добавлено в результат ещё раз.
Во-первых, брать надо не round, а floor.
Во-вторых, должно быть три массива - меньше опорного числа, равные ему и больше него.
const qSort = (arr) => {
if (arr.length < 2) {
return arr;
}
const fund = arr[Math.floor(arr.length / 2)]
let less = []
let equal = []
let greater = []
for (let i = 0; i < 0; i += 1) {
if (arr[i] < fund) {
less.push(arr[i])
}
if (arr[i] === fund) {
equal.push(arr[i])
}
if (arr[i] > fund) {
greater.push(arr[i])
}
}
return qSort(less) + equal + qSort(greater)
}