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

การเรียงลำดับจำนวนเต็มตามจำนวนบิต 1 ในรูปแบบไบนารีใน JavaScript

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็มเป็นอาร์กิวเมนต์เดียว ฟังก์ชันต้องเรียงตัวเลขในอาร์เรย์ตามจำนวนบิต 1 ในการแทนค่าไบนารีจากน้อยไปมาก ถ้ามีตัวเลขหลายตัวที่มีจำนวนบิต 1 เท่ากัน ให้เรียงตามค่าตัวเลขจากน้อยไปมาก

ตัวอย่าง

ถ้าอาร์เรย์นำเข้าคือ:

const arr = [34, 37, 23, 89, 12, 31, 23, 89];

อาร์เรย์ผลลัพธ์จะเป็น:

const output = [34, 12, 37, 23, 89, 23, 89, 31];

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

const arr = [34, 37, 23, 89, 12, 31, 23, 89];
const sortByBinary = (arr = []) => {
  const calculateOne = (str = '') => {
    let res = 0;
    for(let i = 0; i < str.length; i++) {
      if(str[i] === '1') {
        res++;
      }
    }
    return res;
  }
  const sorter = (a, b) => {
    const firstCount = calculateOne((a >>> 0).toString(2));
    const secondCount = calculateOne((b >>> 0).toString(2));
    return firstCount - secondCount;
  };
  arr.sort(sorter);
};
sortByBinary(arr);
console.log(arr);

ผลลัพธ์

[34, 12, 37, 23, 89, 23, 89, 31]