# 1356. Sort Integers by The Number of 1 Bits

#### Easy

***

You are given an integer array `arr`. Sort the integers in the array in ascending order by the number of `1`'s in their binary representation and in case of two or more integers have the same number of `1`'s you have to sort them in ascending order.

Return *the array after sorting it*.

&#x20;

**Example 1:**

```
Input: arr = [0,1,2,3,4,5,6,7,8]
Output: [0,1,2,4,8,3,5,6,7]
Explantion: [0] is the only integer with 0 bits.
[1,2,4,8] all have 1 bit.
[3,5,6] have 2 bits.
[7] has 3 bits.
The sorted array by bits is [0,1,2,4,8,3,5,6,7]
```

**Example 2:**

```
Input: arr = [1024,512,256,128,64,32,16,8,4,2,1]
Output: [1,2,4,8,16,32,64,128,256,512,1024]
Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order.
```

&#x20;

**Constraints:**

* `1 <= arr.length <= 500`
* `0 <= arr[i] <= 104`

```python
class Solution:
    def sortByBits(self, arr: List[int]) -> List[int]:
        # Pass through array and get number of 1's bits in each number
        # Store this in dict and sort using `value`
        d = []
        for num in arr:
            d.append([num, self.countBits(num)])
        def sort(item1, item2):
            if item1[1] < item2[1]:
                return -1
            elif item1[1] > item2[1]:
                return 1
            else:
                if item1[0] < item2[0]:
                    return -1
                else:
                    return 1
        d = sorted(d, key=functools.cmp_to_key(sort))
        return map(lambda item: item[0],d )
        
    def countBits(self, num: int) -> int:
        count = 0
        while num:
            count += 1 & num
            num = num >> 1
        return count
```
