วัด "ความเข้มข้นของการสับเปลี่ยน" (shuffle intensity) ของอาร์เรย์ โดยพิจารณาจากจำนวนคู่ที่ไม่เรียงลำดับ (ไม่ใช่ ascending order)
นิยาม
- 100% shuffled: ไม่มีคู่ใดเรียง ascending (ทุกคู่ลดลง)
- 0% shuffled: ทุกคู่เรียง ascending
ตัวอย่างโค้ด
const arr = [4, 23, 1, 23, 35, 78, 4, 45, 7, 34, 7];
const shuffleIntensity = arr => {
let inCorrectPairs = 0;
if (arr.length <= 1) return 0;
for (let i = 0; i < arr.length - 1; i++) {
// นับคู่ที่ไม่เรียง ascending (ค่าลดลง)
if (arr[i] - arr[i + 1] <= 0) continue;
inCorrectPairs++;
}
return (inCorrectPairs / (arr.length - 1)) * 100;
};
console.log(shuffleIntensity(arr)); // 40
ผลลัพธ์
40
หมายความว่า 40% ของคู่ในอาร์เรย์นี้ไม่เรียง ascending (s shuffled)
ข้อสังเกต: นิยามนี้พิจารณาเฉพาะ "ไม่ใช่ ascending" ไม่ใช่ "สุ่มจริง" อาร์เรย์ที่เรียง descending จะได้ 100%