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

ตรวจสอบอาร์เรย์เรียงลำดับแล้วหรือไม่ (ไม่สนทิศทาง) - JavaScript

ตรวจสอบว่าอาร์เรย์เรียงลำดับแล้วหรือไม่ ไม่สนว่าจะน้อยไปมากหรือมากไปน้อย (Monotonic Array)

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

const arr = [1, 3, 56, 87, 99, 102, 144, 255, 456, 788, 999];

const isSorted = arr => {
  if (arr.length <= 1) return true;
  
  for (let i = 1; i < arr.length; i++) {
    const con1 = arr[i] > 0 && arr[i-1] < 0;
    const con2 = arr[i] < 0 && arr[i-1] > 0;
    if (con1 || con2) return false;
  }
  return true;
};

console.log(isSorted(arr));

ผลลัพธ์

true

ปัญหาของโค้ดต้นฉบับ

โค้ดเช็คแค่ "เครื่องหมาย" (positive/negative) ไม่ใช่ "ลำดับ" จริงๆ

เช่น [1, -2, 3] จะคืน true แต่อาจไม่ได้เรียง

เวอร์ชันที่ถูกต้อง (Monotonic Check)

const isMonotonic = arr => {
  if (arr.length <= 2) return true;
  
  let increasing = true, decreasing = true;
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > arr[i-1]) decreasing = false;
    if (arr[i] < arr[i-1]) increasing = false;
  }
  return increasing || decreasing;
};

เช็คพร้อมกันว่าเพิ่มขึ้นอย่างเดียว หรือลดลงอย่างเดียว