自定义排序1 时间限制:1s 内存限制:256M 题目描述 读入n个正整数,按照十进制表示中1的个数从小到大排序, 1的个数相同的按照从小到大排序。用c++语言
时间: 2024-12-04 19:29:10 浏览: 28
自定义排序1的问题通常涉及要求编写一个程序,输入一组正整数,然后按照每个数字中1的个数以及整个数值大小进行排序。这可以采用计数排序(Counting Sort)或者先通过位运算统计每个数字中1的数量,再结合其他排序算法如快速排序、归并排序等对结果进行排序。
以下是使用C++解决这个问题的一种简单方法,这里我们假设范围较小并且不会溢出:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 计算一个整数中1的个数
int countBits(int num) {
int count = 0;
while (num > 0) {
if (num & 1) ++count; // 如果最低位是1,则加1
num >>= 1; // 右移一位
}
return count;
}
void customSort(vector<int>& nums) {
vector<pair<int, int>> pairs(nums.size());
for (size_t i = 0; i < nums.size(); i++) {
pairs[i] = {countBits(nums[i]), nums[i]};
}
sort(pairs.begin(), pairs.end()); // 先按1的个数排序
nums.clear();
for (const auto& pair : pairs) {
nums.push_back(pair.second); // 然后按原始值顺序添加回原数组
}
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int& num : nums) {
cin >> num;
}
customSort(nums);
// 输出排序后的数组
for (int num : nums) {
cout << num << " ";
}
cout << endl;
阅读全文