{ "question_id": 1104214, "question_title": "按要求排序数组", "question_content": "
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。
", "difficulty": "简单", "answer_id": 1318491, "answer_content": "\n#include<stdio.h>\n#include<stdlib.h>\nint oneNum(int x)\n{\n int cnt = 0;\n while(x)\n {\n cnt++;\n x = x&(x-1);\n }\n return cnt;\n}\n\nint cmp(const void *a,const void*b)\n{\n int al,bl;\n int ret;\n al = *(int*)a;\n bl = *(int*)b;\n ret = oneNum(al) - oneNum(bl);\n return ret ? ret : al - bl;\n}\n\nint main()\n{\n int s[]={1,2,3,5,6,7,8},i;\n int len = sizeof(s)/sizeof(*s);\n qsort(s,len,4,cmp);\n for(i = 0 ; i < len ; i++)\n {\n printf(\"%d\\n\",s[i]);\n }\n}
\n\n", "tag_name": "c语言", "cpp": "#include