Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ถูกต้องหรือไม่ที่จะใช้ Array.sort() สำหรับการสุ่มลำดับ (Shuffling) ใน JavaScript?

ไม่ถูกต้อง การใช้ Array.sort(() => Math.random() - 0.5) ไม่ให้การสุ่มที่กระจายตัวสม่ำเสมอ (biased) เพราะ sort algorithm ไม่ได้ออกแบบมาสำหรับสุ่ม

วิธีที่ถูกต้องคือ Fisher-Yates Shuffle Algorithm:

function shuffleArray(arr) {
  var tmp, current;
  var top = arr.length;
  if(top) while(--top) {
    current = Math.floor(Math.random() * (top + 1));
    tmp = arr[current];
    arr[current] = arr[top];
    arr[top] = tmp;
  }
  return arr;
}

อัลกอริทึมนี้ให้การสุ่มที่ uniform และมีประสิทธิภาพ O(n)