#6832. 二进制大小排序
二进制大小排序
二进制大小排序
题目描述
小明正在研究整数的二进制表示。
对于一个正整数,我们定义它的:
二进制长度
为该数字转换成二进制后,从最高位的 1 开始到最低位所包含的位数。
例如:
1 的二进制:1 长度为 1
5 的二进制:101 长度为 3
10 的二进制:1010 长度为 4
现在给定 n 个正整数,请按照以下规则排序:
- 二进制长度较大的数字排在前面;
- 如果两个数字的二进制长度相同,则数字较小的排在前面。
请输出排序后的结果。
输入格式
第一行包含一个整数:
n
表示数字的数量。
第二行包含 n 个正整数:
a1 a2 ... an
表示需要排序的数字。
输出格式
输出一行:
排序后的 n 个数字。
数字之间用一个空格隔开。
数据范围
1 ≤ n ≤ 100000
1 ≤ ai ≤ 10^18
保证所有数字均为正整数。
样例输入1
6
1 8 3 10 5 2
样例输出1
8 10 5 2 3 1
样例解释
每个数字的二进制表示:
| 数字 | 二进制 | 长度 |
|---|---|---|
| 1 | ||
| 2 | 10 | 2 |
| 3 | 11 | |
| 5 | 101 | 3 |
| 8 | 1000 | 4 |
| 10 | 1010 | |
按照规则:
第一步:二进制长度从大到小
长度4:
8 10
长度3:
5
长度2:
2 3
长度1:
1
第二步:相同长度按照数字升序
所以答案:
8 10 5 2 3 1
样例输入2
8
7 4 12 3 15 1 8 2
样例输出2
8 12 15 4 7 2 3 1