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

การจัดเรียงอาร์เรย์แบบไม่สม่ำเสมอ (Uneven Sort) ใน JavaScript

ปัญหา

จัดเรียงอาร์เรย์ให้เป็น pattern: arr[0] < arr[1] > arr[2] < arr[3] ... (wiggle sort)

ตัวอย่าง

input: [1, 5, 1, 1, 6, 4]
output: [1, 6, 1, 5, 1, 4] (หนึ่งในคำตอบ)

ตัวอย่างโค้ด

const arr = [1, 5, 1, 1, 6, 4];

const unevenSort = (arr = []) => {
  arr.sort((a, b) => a - b);
  let mid = Math.floor(arr.length / 2);
  if (arr.length % 2 === 1) {
    mid += 1;
  }
  let even = arr.slice(0, mid);
  let odd = arr.slice(mid);
  for (let i = 0; i < arr.length; i++) {
    if (i % 2 === 0) {
      arr[i] = even.pop();
    } else {
      arr[i] = odd.pop();
    }
  }
};

unevenSort(arr);
console.log(arr);

ผลลัพธ์

[1, 6, 1, 5, 1, 4]

คำอธิบาย

เรียงอาร์เรย์ แบ่งครึ่ง: ครึ่งเล็ก (even indices), ครึ่งใหญ่ (odd indices)

pop จากท้าย (ค่ามากที่สุดของแต่ละครึ่ง) วางสลับกัน

ได้ pattern: small_big, large_big, small_medium, large_medium ...

Time: O(n log n) เนื่องจาก sort