บทความนี้สาธิตการจัดเรียงอาร์เรย์ให้เป็นรูปแบบ arr[0] < arr[1] > arr[2] < arr[3] ... (alternating low-high)
ตัวอย่าง
input: [1, 2, 3, 4, 5, 6] output: [3, 6, 2, 5, 1, 4] (หนึ่งในคำตอบที่เป็นไปได้)
ตัวอย่างโค้ด
const arr = [1, 2, 3, 4, 5, 6];
const alternateSort = (arr = []) => {
arr.sort((a, b) => a - b);
const N = arr.length;
let mid = Math.floor(N / 2);
if (N % 2 !== 0) {
mid++;
}
const small = arr.splice(0, mid);
const big = arr.splice(0, arr.length);
for (let i = 0; i < N; i++) {
if (i % 2 === 0) {
arr[i] = small.pop();
} else {
arr[i] = big.pop();
}
}
};
alternateSort(arr);
console.log(arr);
ผลลัพธ์
[3, 6, 2, 5, 1, 4]
คำอธิบาย
เรียงอาร์เรย์จากน้อยไปมาก แบ่งเป็น 2 ครึ่ง: ครึ่งเล็ก (small) และครึ่งใหญ่ (big)
จากนั้นสลับกันวาง: index คู่เอาจาก small.pop() (ค่ามากที่สุดของครึ่งเล็ก) index คี่เอาจาก big.pop() (ค่ามากที่สุดของครึ่งใหญ่)
ผลลัพธ์จะเป็น low-high-low-high pattern