二进制数的排序方法主要分为以下两类,涵盖不同应用场景:
一、按二进制位数排序(快速排序)
基本思路 从最高位二进制位开始,将数组分为最高位为0和1的两部分,递归地对子数组进行排序。例如,对于无符号整数数组,从第31位开始比较,交换对应位的0和1,逐步完成排序。
时间复杂度
为O(kn),其中k为最高二进制位数,n为数组长度。空间复杂度为O(1),仅使用常数级辅助空间。
二、按二进制中1的个数排序
核心方法
使用自定义排序函数,根据每个整数的二进制表示中1的个数进行升序排序。若1的个数相同,则按数值大小排序。例如,输入数组[0,1,2,3],输出为[0,1,2,4,8]。
实现步骤
- 定义`countbits`函数,通过位运算统计1的个数(如`n & 1`)。
- 使用标准库`sort`函数,结合lambda表达式作为自定义比较器。
三、通用转换方法(补充说明)
十进制转二进制: 采用"除2取余,逆序排列"法。例如,8的二进制为1000,通过不断除以2并记录余数实现。 二进制排序优化
以上方法可根据实际需求选择,快速排序适用于位操作高效场景,按1的个数排序则适用于统计特性分析。