按要求排序数组

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

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

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

#include<stdio.h>
#include<stdlib.h>
int oneNum(int x)
{
	int cnt = 0;
	while(x)
	{
		____________;
	}
	return cnt;
}
int cmp(const void *a,const void*b)
{
	int al,bl;
	int ret;
	al = *(int*)a;
	bl = *(int*)b;
	ret =  oneNum(al) - oneNum(bl);
	return  ret ? ret : al - bl;
}
int main()
{
	int s[]={1,2,3,5,6,7,8},i;
	int len = sizeof(s)/sizeof(*s);
	qsort(s,len,4,cmp);
	for(i = 0 ; i < len ; i++)
	{
		printf("%d\n",s[i]);
	}
}
...全文
644 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 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,607

社区成员

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

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