JavaScriptでsetTimeout関数を使用して配列をソートする方法


方法1: setTimeoutを使用してバブルソートを実装する

function bubbleSortWithTimeout(array) {
  let len = array.length;
  let swapped;
  let timeout = 0;
  do {
    swapped = false;
    for (let i = 0; i < len - 1; i++) {
      setTimeout(() => {
        if (array[i] > array[i + 1]) {
          let temp = array[i];
          array[i] = array[i + 1];
          array[i + 1] = temp;
          swapped = true;
        }
      }, timeout);
      timeout += 100; // 適宜調整してください
    }
  } while (swapped);
  return array;
}
const array = [5, 3, 8, 4, 2];
console.log(bubbleSortWithTimeout(array));

方法2: setTimeoutを使用してマージソートを実装する

function mergeSortWithTimeout(array) {
  if (array.length <= 1) {
    return array;
  }
  const middle = Math.floor(array.length / 2);
  const left = array.slice(0, middle);
  const right = array.slice(middle);
  return mergeWithTimeout(mergeSortWithTimeout(left), mergeSortWithTimeout(right));
}
function mergeWithTimeout(left, right) {
  let result = [];
  let timeout = 0;
  while (left.length && right.length) {
    setTimeout(() => {
      if (left[0] < right[0]) {
        result.push(left.shift());
      } else {
        result.push(right.shift());
      }
    }, timeout);
    timeout += 100; // 適宜調整してください
  }
  return [...result, ...left, ...right];
}
const array = [5, 3, 8, 4, 2];
console.log(mergeSortWithTimeout(array));

上記のコードは、setTimeoutを使用してバブルソートとマージソートを実装する方法を示しています。コード内のtimeout値を適宜調整して、遅延実行の間隔を調整することができます。

注意点として、setTimeoutは非同期関数であるため、ソートの完了を待つために適切なコールバックやPromiseを使用する必要があることに注意してください。