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 数组元素进行排序? [复制]