一个笔试题目,望更方便的算法
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; }
相关文章推荐
- (笔试中的题目)一个已经排序好的数组找到两个数字相加等于一个给定的数
- 百度2014校招笔试题目题解(更新了第1题的算法,10.9下午) .
- Java算法题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
- 算法之美一书附录中笔试面试题目参考答案
- 该公司笔试题就1个,要求在10分钟内作完。 题目如下:用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, 如:512234、412325等,要求:"4"不能在第三位,"3"与"5"不能相连。
- 在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是----阿里巴巴2015实习生笔试题
- 一个关于的指针的经典笔试题目,加上自己的一点体会
- 阿里巴巴 2015 实习笔试题 分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出
- 一个小算法题目
- 算法-美团2015校招笔试:写一个复杂度为n的排序算法
- 笔试题目---描述在浏览器中敲入一个网址并按下回车后所发生的事情
- 一个简单的算法题目,搞了半天,希望大家能给点意见
- 大家进来看看这个问题 前几天的一个笔试题目
- 一个公司的笔试题目
- 【算法】各大公司笔试题目之数组相关笔试题
- 一个笔试题目(实现大小端的相互转换,只针对32位的int类型)
- 一个排列数字的算法笔试题
- 输入阿拉伯数字(整数),输出相应的中文(美团网2014年9月16日笔试题目之中的一个)
- 阿里巴巴校招2017前端笔试题目 -- 原生js/html5 实现一个路由
- 一个有趣的算法题目