C++ 实现正整数排序:按 1 的个数排序,相同个数则从小到大排序
#include
int count(int x) { // 计算x的二进制表示中1的个数 int cnt = 0; while (x) { cnt += x % 2; x /= 2; } return cnt; }
bool cmp(int a, int b) { // 比较函数 int cnta = count(a), cntb = count(b); if (cnta != cntb) return cnta < cntb; return a < b; }
int main() { int n; cin >> n; int a[n]; for (int i = 0; i < n; i++) cin >> a[i]; sort(a, a + n, cmp); for (int i = 0; i < n; i++) cout << a[i] << ' '; return 0; }
原文地址: https://www.cveoy.top/t/topic/ov97 著作权归作者所有。请勿转载和采集!