c_cpp 按设置位的降序对数组进行排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 按设置位的降序对数组进行排序相关的知识,希望对你有一定的参考价值。
#include <bits/stdc++.h>
using namespace std;
// #BitManipulation
// Sort given array in descending order of set bits
// ex: 11->1011 -> 3 set bits
int calc(int a){
int setbits=0;
while(a>0){
if(a%2==1){
setbits++;
}
a=a/2;
}
return setbits;
}
int maxIndex(vector<int> a,int l,int r){
int max=INT_MIN;
int maxInd;
for(int i=l;i<=r;i++){
if(a[i]>max){
max=a[i];
maxInd=i;
}
}
return maxInd;
}
void swap(int &a,int &b){
int t=a;
a=b;
b=t;
}
void func(vector<int> &a){
int n=a.size();
vector<int> setbits(n);
for(int i=0;i<n;i++){
setbits[i]=calc(a[i]);
}
for(int i=0;i<n;i++){
int maxInd=maxIndex(setbits,0,n-1-i);
swap(setbits[maxInd],setbits[n-1-i]);
swap(a[maxInd],a[n-1-i]);
}
}
int main() {
int t;
cin>>t;
while(t--){
int n;
cin>>n;
vector<int> a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}
func(a);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
以上是关于c_cpp 按设置位的降序对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章
按 C 中元素出现频率的降序对数组进行排序
按特定键的降序对字典列表进行排序[重复]
如何根据php中日期列的降序对mysql结果数组进行排序?
按降序对数组进行排序的更好方法
按特定索引降序对数组进行排序[重复]
如何按降序对 JSON 数组元素进行排序? [复制]