@pand1go

Как сформировать алгоритм быстрой сортировки по свойствам объекта?

Доброго времени суток! Пытаюсь освоить алгоритмы сортировки. Есть задание отсортировать массив по свойствам его объектов(color); Написал функцию сравнения, для метода пузырьком срабатывает, для быстрой сортировки выдает ошибку: Uncaught TypeError: Cannot read properties of undefined (reading 'color')
Можете подсказать с чем это связно, предполагаю, что условие сравнения надо поменять)
let fruitsJSON = `[
  {"kind": "Мангустин", "color": "фиолетовый", "weight": 13},
  {"kind": "Дуриан", "color": "зеленый", "weight": 35},
  {"kind": "Личи", "color": "розово-красный", "weight": 17},
  {"kind": "Карамбола", "color": "желтый", "weight": 28},
  {"kind": "Тамаринд", "color": "светло-коричневый", "weight": 22}
]`;

// преобразование JSON в объект JavaScript
let fruits = JSON.parse(fruitsJSON);

const comparationColor = (fruit1, fruit2) => {
  // функция сравнения двух элементов по цвету
  const priority = ['красный', 'розово-красный', 'оранжевый', 'желтый', 'зеленый', 'голубой', 'синий', 'фиолетовый', 'светло-коричневый'];
  const priority1 = priority.indexOf(fruit1.color);
  const priority2 = priority.indexOf(fruit2.color);
  return priority1 > priority2
};

function swap(arr, a, b) {
    let temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}

function quickSort(arr, comparation) {
    return quick(arr, 0, arr.length - 1, comparation);
}
function quick(arr, left, right, comparation) {
    let i;
    if (arr.length > 1) {
        i = partition(arr, left, right, comparation);
        if (left < i - 1) {
            quick(arr, left, i - 1, comparation);
        }
        if (i < right) {
            quick(arr, i, right, comparation);
        }
    }
    return arr;
}
function partition(arr, left, right, comparation) {
    const pivot = arr[Math.floor((right, left) / 2)];
    let i = left;
    let j = right;
    while (i <= j) {
        while (comparation(arr[i], pivot)) {
            i++;
        }
        while (comparation(arr[j], pivot) === false) {
            j--;
        }
        if (i <= j) {
            swap(arr, i, j);
            i++;
            j--;
        }
    }
    return i;
}

quickSort(fruits, comparationColor);
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы