Computer >> Máy Tính >  >> Lập trình >> Javascript

Thuật toán sắp xếp gốc kỹ thuật số JavaScript

Gốc chữ số của một số nguyên dương được định nghĩa là tổng của tất cả các chữ số của nó. Chúng tôi được cung cấp một mảng số nguyên. Chúng ta phải sắp xếp nó theo cách sao cho nếu a đứng trước b nếu gốc chữ số của a nhỏ hơn hoặc bằng gốc chữ số của b. Nếu hai số có cùng gốc chữ số, thì số nhỏ hơn (theo nghĩa thông thường) phải đứng trước. Ví dụ:4 và 13 có cùng một gốc chữ số, tuy nhiên 4 <13 do đó 4 đứng trước 13 trong bất kỳ sắp xếp chữ số nào khi cả hai đều có mặt.

Ví dụ,

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

Hãy viết mã cho sự cố này -

Chúng tôi sẽ chia nó thành hai hàm, một hàm đệ quy đếm tổng các chữ số của một số và sau đó là một hàm sắp xếp sắp xếp thứ tự phần tử trên cơ sở tổng các chữ số.

Mã cho điều này sẽ là -

Ví dụ

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);

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

[ 23, 8, 26, 54, 89 ]