Bubble sort, сохранение истории свопов не работает - PullRequest
1 голос
/ 22 сентября 2019

Разработка сортировочного визуализатора с использованием JavaScript.Я не могу сохранить свопы, выполненные на каждой итерации в истории свопов, однако массив swapHistory заполняется окончательным выводом, но если я console.log (выход), который регистрирует текущую итерацию ??Я совершенно сбит с толку этим

bubbleSort = (input) => {
    startTime = performance.now();
    var output = input;
    swapHistory = [];
    swaps = 0;
    let swap = false;
    do {
        swap = false;
        output.forEach((current, i) => {
            if (current > output[i + 1]) {
                const temp = current;
                console.log(current);
                console.log(output[i + 1]);
                console.log(output);
                swapHistory.push(output);
                output[i] = output[i + 1];
                output[i + 1] = temp;
                swaps++;
                swap = true;
            }
        });
    } while (swap);
    endTime = performance.now();
    timeTaken = endTime - startTime;
    console.log(timeTaken);
    setArray(output);
    $("#timeTaken").html("Time taken: " + timeTaken.toFixed(4) + "ms");
};

Ожидание заполнения массива swapHistory при каждой итерации свопов

1 Ответ

0 голосов
/ 22 сентября 2019

Это потому, что вы помещаете сам массив output в массив swapHistory, когда вы хотите передать текущее значение от output до swapHistory.По сути, вы передаете по ссылке, когда хотите передать по значению.

Простое решение здесь - клонировать массив output и сохранить его в swapHistory, а не ссылку на * 1009.* сам массив.Итак, измените swapHistory.push(output); на swapHistory.push(output.slice());, так как срез без параметров - это просто быстрый способ клонировать массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...