合并排序与 JS 中的用户输入比较

Merge sort with user input comparisons in JS

我用 JS 编写了一个网页,让用户输入他喜欢的元素数量,然后让他获得这些元素的排名,对它们进行排序。一开始我做了所有的比较,这样我就可以在询问用户之前提前计划我需要哪些比较,但是...

这是 O(n²),显然不适合大于 5 的元素数。

我现在正在尝试实现合并排序,但我无法再计划所有需要的比较,我必须在合并过程中询问用户。这是我的代码的样子:

async function mergeSort(array) {
  if (array.length < 2) return array;
  const middle = Math.floor(array.length / 2);
  const left = array.slice(0, middle);
  const right = array.slice(middle, array.length);
  const sortedLeft = mergeSort(left);
  const sortedRight = mergeSort(right);
  return mergeArrays(sortedLeft, sortedRight);
}

function mergeArrays(left, right) {
  const res = [];
  while (left.length && right.length) {
    document.getElementById("left").innerHTML = left[0];
    document.getElementById("right").innerHTML = right[0];
    //???
    res.push( /*left greater than right?*/ ? right.shift() : left.shift());
  }
  while (left.length) {
    res.push(left.shift());
  }
  while (right.length) {
    res.push(right.shift());
  }
  return res;
}

理想情况下,代码会等待用户单击“左”或“右”HTML 按钮,然后继续排序过程。但我不知道该怎么做,即使有承诺或回调。

可能不理想,但 confirm box 可能是一个快速的解决方案,因为它会阻止执行,直到用户单击按钮:

if (confirm("Is " + left[0] + " less than " + right[0] + "?")) {
  res.push(left.shift());
} 
else {
  res.push(right.shift());
}

answer 中的评论说确认框按钮不能更改为 Yes/No

如果要寻找替代方案,请查看 this question 的答案。