• 全部
...

按要求排序数组

每日一练社区 2021-08-11 11:49:10

 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。

以下程序实现了这一功能,请你补全空白处内容:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int oneNum(int x)
  4. {
  5. int cnt = 0;
  6. while(x)
  7. {
  8. ____________;
  9. }
  10. return cnt;
  11. }
  12. int cmp(const void *a,const void*b)
  13. {
  14. int al,bl;
  15. int ret;
  16. al = *(int*)a;
  17. bl = *(int*)b;
  18. ret = oneNum(al) - oneNum(bl);
  19. return ret ? ret : al - bl;
  20. }
  21. int main()
  22. {
  23. int s[]={1,2,3,5,6,7,8},i;
  24. int len = sizeof(s)/sizeof(*s);
  25. qsort(s,len,4,cmp);
  26. for(i = 0 ; i < len ; i++)
  27. {
  28. printf("%d\n",s[i]);
  29. }
  30. }
...全文
给本帖投票
862 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_63650227 2023-05-26
  • 打赏
  • 举报
回复

算数运算符比按位与优先级别高加不加括号不是一样的吗?

shmilywcy 2023-02-19
  • 打赏
  • 举报
回复

用matlab很简单,调用一个函数即可

pppphhhhyyyy 2023-02-19
  • 打赏
  • 举报
回复

(int)a友友们我想问下这个是什么意思?

pppphhhhyyyy 2023-02-19
  • 举报
回复
@pppphhhhyyyy 16行
lanhml919 2024-08-09
  • 举报
回复
@pppphhhhyyyy 要看*号,有*没*两个意思,*(int*)a是指将指针a强制转化为int型指针并指向a的地址
YUの 2023-01-27
  • 打赏
  • 举报
回复
没看懂 升序不应该是x+1么?😔
☆莫辞凡☆ 2022-06-22
  • 打赏
  • 举报
回复 2
看不懂,蒙对了。
彡亽 2022-05-03
  • 打赏
  • 举报
回复 1
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《x&(x-1)的作用》, 一起来围观吧 https://blog.csdn.net/veneno_one/article/details/114121715?utm_source=app&app_version=5.3.1&code=app_1562916241&uLinkId=usr1mkqgl919blen
▍ 小太阳 ☼ 2022-03-05
  • 打赏
  • 举报
回复
有大佬讲解一下吗,没看懂题目。。
Kamen Black君 2021-09-26
  • 打赏
  • 举报
回复
确实,几题都是这样
philippe coutinho 2021-08-31
  • 打赏
  • 举报
回复 1
没看太懂,就一个for中就能看到答案

11,799

社区成员

发帖
与我相关
我的任务
社区描述
Study well and make progress every day
其他 企业社区
社区管理员
  • 每日一练社区
  • CSDN学习
  • 幻灰龙
加入社区
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部