给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。 请你返回排序后的数)
时间: 2024-03-17 13:43:06 浏览: 85
cpp代码-(数组)将两个升序数组合并为一个升序数组
可以使用自定义的比较函数对数组进行排序,比较函数先比较每个数字的二进制中 1 的个数,如果个数相同再比较数值大小。
以下是 C++ 的实现代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int countBits(int num) {
int count = 0;
while (num) {
count += num & 1;
num >>= 1;
}
return count;
}
bool cmp(int a, int b) {
int countA = countBits(a);
int countB = countBits(b);
if (countA == countB) {
return a < b;
}
return countA < countB;
}
vector<int> sortByBits(vector<int>& arr) {
sort(arr.begin(), arr.end(), cmp);
return arr;
}
int main() {
vector<int> arr = {0, 1, 2, 3, 4, 5, 6, 7, 8};
vector<int> sortedArr = sortByBits(arr);
for (int i = 0; i < sortedArr.size(); i++) {
cout << sortedArr[i] << " ";
}
cout << endl;
return 0;
}
```
该程序中,countBits 函数用于计算一个数字的二进制中 1 的个数,cmp 函数用于比较两个数字的二进制中 1 的个数和数值大小,sortByBits 函数用于对数组进行排序并返回排序后的数组。在主函数中,我们先定义了一个示例数组 arr,然后调用 sortByBits 函数对其进行排序,并输出排序后的结果。
阅读全文