您的位置:首页 > 其它

一个笔试题目,望更方便的算法

2012-10-07 22:03 169 查看
题目: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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 测试
相关文章推荐