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

อัลกอริทึมจัดเรียงรากดิจิตอล (Digital Root Sort) ใน JavaScript


รากดิจิตอลของจำนวนเต็มบวกบางจำนวน ถูกนิยามว่าเป็นผลรวมของหลักทั้งหมด เราได้รับอาร์เรย์ของจำนวนเต็ม ต้องจัดเรียงให้ a อยู่หน้า b ถ้ารากดิจิตอลของ a น้อยกว่าหรือเท่ากับรากดิจิตอลของ b หากสองตัวเลขมีรากดิจิตอลเท่ากัน ตัวเลขที่น้อยกว่า (ในความหมายทั่วไป) จะอยู่ก่อน เช่น 4 และ 13 มีรากดิจิตอลเท่ากัน แต่ 4 < 13 ดังนั้น 4 จะอยู่ก่อน 13 ในการจัดเรียงรากดิจิตอลที่มีทั้งคู่

ตัวอย่าง

for a = [13, 20, 7, 4], the output should be [20, 4, 13, 7].

มาเขียนโค้ดสำหรับปัญหานี้ เราจะแบ่งเป็นสองฟังก์ชัน: ฟังก์ชันเวียนเกิดที่นับผลรวมหลักของตัวเลข และฟังก์ชันจัดเรียงที่เรียงลำดับองค์ประกอบตามผลรวมหลัก

โค้ดสำหรับนี้คือ

ตัวอย่าง

const arr = [54, 23, 8, 89, 26]; const recursiveCount = (num, count = 0) => {    if(num){       return recursiveCount(Math.floor(num/10), count+num%10);    };    return count; }; const sorter = (a, b) => {    const countDifference = recursiveCount(a) - recursiveCount(b);    return countDifference || a - b; }; arr.sort(sorter); console.log(arr);

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้

[ 23, 8, 26, 54, 89 ]