题目:unsigned int 型一个数组,按照比特位中“1”的个数对数组元素进行从小到大排序,如果含有“1”的个数相同,按从小到大排序,unsigned int 32位。
题目原意是写个函数就够了,不过为了验证,还是写了一个完整的程序,这样函数也好弄了嘛。当然,这个方法还是有点笨拙,望高手们再指点一二,改进下。那就不多说,直接贴代码了:
#include <stdio.h>
#include <stdlib.h>
int testNum(int i) //测试该数中“1”的个数
{
int n=0;
while(i)
{
n += i&0x01;
i >>= 1;
}
return n;
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a[] = {4,7,9,19,5,44};
int len = sizeof(a)/sizeof(int);
printf("array is %d\n",len);
int n,m;
int i,j;
for(i=0; i<len; i++)
{
for(j=0; j<len-i-1; j++)
{
n = testNum(a[j]);
m = testNum(a[j+1]);
if(n > m)
swap(&a[j],&a[j+1]);
else if(n == m)
{
if(a[j] > a[j+1])
swap(&a[j],&a[j+1]);
}
}
}
for(i=0; i<len; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}